2016-07-21 8 views
0

У меня есть следующий код, который не работает. То, что я хочу сделать, основано на некоторой переменной, которую я должен проверить, истинны ли все битовые поля этой переменной. Если да, верните true else, верните false.IF EXISTS в инструкции SWITCH

Любые предложения?

 DECLARE @var NVARCHAR(20); 

IF EXISTS (SELECT variable FROM Table1 WHERE [email protected]) 
BEGIN 
    SELECT @var=variable FROM Table1 WHERE [email protected] 
    SELECT CASE @var 
    WHEN 1 THEN 
     IF EXISTS(SELECT CheckFlag FROM Table2 INNER JOIN Table1 ON Table2.IDNO=Table1.IDNO WHERE [Check1]=1 and [Check2]=1 and [Check3]=1 and [email protected]) 
     RETURN 1 
     ELSE 
     RETURN 0 
    WHEN 2 THEN 
     ...... 
    ELSE -1 
END 

Заранее спасибо.

+0

«не работает» слишком расплывчато. Какие значения у вас есть в таблицах и переменных, что вы ожидаете, и какое значение в настоящее время возвращается. –

+0

Ошибка, которую я получаю, это «Неправильный синтаксис рядом с IF» (строка 6). Вот логика запроса: У меня разные переменные (как в категориях), и я хочу проверить некоторые битовые поля для каждого из них. Если все битовые поля истинны, я хочу, чтобы sproc возвращал true, иначе sproc вернет false. На основании ввода я должен проверить одно предложение @var через switch. – Chriz

ответ

1

A CASE WHEN для строительства требуется участок THEN, за которым следует expression. Вы не можете делать там заявления, such as IF или RETURN.

Вместо этого вы должны поместить выражение там, так что, когда SELECT заявление оценили его, и дает свои результаты, вы можете использовать что значение для выполнения дальнейших заявлений с ним, в том числе IF или RETURN.

Таким образом, вы могли бы заменить это:

SELECT CASE @var 
    WHEN 1 THEN 
     IF EXISTS(SELECT CheckFlag FROM Table2 INNER JOIN Table1 ON Table2.IDNO=Table1.IDNO WHERE [Check1]=1 and [Check2]=1 and [Check3]=1 and [email protected]) 
      RETURN 1 
     ELSE 
      RETURN 0 

с RETURN утверждением, что получает возвращаемое значение из SELECT, также используя Count и Sign функции для получения 0 или 1 значение:

RETURN SELECT CASE @var 
     WHEN 1 THEN 
      (SELECT  Sign(Count(*)) 
      FROM  Table2 
      INNER JOIN Table1 
        ON Table2.IDNO=Table1.IDNO 
      WHERE  [Check1]=1 and [Check2]=1 and [Check3]=1 and [email protected]) 
+0

Спасибо за ответ! – Chriz