#tsql
#tsql
Вопрос:
Привет, у меня есть этот запрос
IF (select kmkood from or_arved_read where kmkood = '1' or kmkood = '14' or kmkood = '15' or kmkood = '6' )
BEGIN
SET @stat_vat = 21
IF (select kmkood from or_arved_read where kmkood = '2' or kmkood = '7' )
SET @stat_vat = 12
Но оно возвращает An expression of non-boolean type specified in a context where a condition is expected, near 'BEGIN'.
как я могу это исправить?
Комментарии:
1. Если вы хотите проверить существование хотя бы одной записи, вы можете попробовать, ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ … )
2. Я хочу поставить
@stat_vat = 21 where kmkood = 1 or 14 or 15 or 6
@sergiom3. Является ли stat_vat полем таблицы or_arved_read ? Если это так, то вам нужен оператор UPDATE. В противном случае, если @stat_vat является переменной, то добавление EXISTS перед «(» исправит ваше выражение booelan .
Ответ №1:
Во-первых, у вас IF
нет логического выражения. Подзапрос возвращает значение (или, точнее, для этого сценария вернет много и вызовет другую ошибку) для столбца kmkood
, но тогда вы ничего не делаете с этим значением. Какое значение требуется для этого столбца? Формат должен быть примерно таким:
IF (SELECT SomeColumn FROM dbo.SomeTable WHERE... ) = 'SomeValue'
Кроме того, если у вас есть BEGIN
, вам нужно END
потом, которого у вас нет:
IF (SELECT SomeColumn FROM dbo.SomeTable WHERE... ) = 'SomeValue'
BEGIN
{Do several statements}
END
Поскольку, однако, вы просто выполняете SET
оператор, тогда вам на самом деле не нужны операторы BEGIN
and END
.
Я подозреваю, что вы действительно ищете здесь, однако, в EXISTS
:
IF EXISTS(SELECT 1 FROM dbo.or_arved_read WHERE kmkood IN (1,14,15,6))
SET @stat_vat = 21;
IF EXISTS(SELECT 1 FROM dbo.or_arved_read WHERE kmkood IN (2,7))
SET @stat_vat = 12;
Вам также не нужны все эти OR
s, an IN
работает нормально, и числа не должны быть в одинарных кавычках, так что это немного упрощает задачу.