Вы можете использовать.
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'.