Оценка различных условий в одном операторе if для хранимого процесса - PullRequest
2 голосов
/ 26 января 2012

У меня есть сохраненный процесс, который я пытаюсь написать, где я хочу оценить несколько условий для разных параметров за один раз. Каков наилучший синтаксис для этого?

Вот что у меня есть:

AS
BEGIN
    DECLARE @GARRISON nvarchar(255)
    DECLARE @ASSETTYPE nvarchar(255)
    DECLARE @FIVALUE int

    IF (  ( @GARRISON IS NOT 'Netheravon' 
            AND @GARRISON IS NOT 'Ludgershall'
          )
          AND @INTERRUPT >= 5)
        BEGIN

        END
    ELSE

END

1 Ответ

7 голосов
/ 26 января 2012

Вы можете использовать.

IF ((@GARRISON != 'Netheravon' AND @GARRISON != 'Ludgershall') )
AND @INTERRUPT >= 5)

Это можно сократить до

IF (@GARRISON NOT IN ('Netheravon', 'Ludgershall' )
AND @INTERRUPT >= 5)

Проблема, с которой вы столкнулись, заключалась в том, что у вас есть @variable IS NOT 'constant' - это недопустимый синтаксис SQL, если только не проверяется на нулевое значение Для равенства используйте =, для неравенства используйте != или <> (оба работают IIRC).


Редактировать: это точный sctipt, который я использовал для тестирования, и работает точно так, как ожидалось. SQL Server 2008

DECLARE @GARRISON nvarchar(255)
DECLARE @INTERRUPT INT

SET @GARRISON = 'Test'
SET @INTERRUPT = 10


IF (@GARRISON NOT IN ('Netheravon' ,'Ludgershall' )
   AND @INTERRUPT >= 5)  
BEGIN
SELECT 1
END

Выше правильно выводит «1», так как оба условия оценивают как истинное. Если я либо поменяю @INTERRUPT на 4, либо @GARRISON на Netheravon или Ludgershall, то выходных данных не будет. Это именно то поведение, которое я ожидаю.

Примечание: в SQL не может быть пустого блока BEGIN...END, поэтому, если он пуст, вы получите ошибку Incorrect syntax near 'END'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...