在存储过程中的一个if语句中评估不同的条件

Gur*_*epS 2 sql t-sql sql-server

我有一个存储过程,我正在尝试编写,我想在一次评估不同参数的多个条件.这个的最佳语法是什么?

以下是我所拥有的:

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
Run Code Online (Sandbox Code Playgroud)

Jam*_*iec 7

您可以使用.

IF ((@GARRISON != 'Netheravon' AND @GARRISON != 'Ludgershall') )
AND @INTERRUPT >= 5)
Run Code Online (Sandbox Code Playgroud)

这可以缩短为

IF (@GARRISON NOT IN ('Netheravon', 'Ludgershall' )
AND @INTERRUPT >= 5)
Run Code Online (Sandbox Code Playgroud)

您遇到的问题是@variable IS NOT 'constant'- 除非检查null,否则这不是有效的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
Run Code Online (Sandbox Code Playgroud)

以上正确输出"1",因为两个条件都评估为真.如果我@INTERRUPT改为4,或者@GARRISON改为Netheravon或Ludgershall,那么就没有输出.这是我期望的确切行为.

注意:BEGIN...ENDSQL中不能有空块,因此如果为空,则会出现错误Incorrect syntax near 'END'.