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

时间:2012-01-26 11:23:49

标签: sql sql-server tsql

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

以下是我所拥有的:

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 个答案:

答案 0 :(得分:7)

你可以使用。

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

这可以缩短为

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

你遇到的问题是你有@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

以上正确输出“1”,因为两个条件都评估为真。如果我将@INTERRUPT更改为4,或将@GARRISON更改为Netheravon或Ludgershall,则无法输出。这是我期望的确切行为。

注意:您在SQL中不能有一个空的BEGIN...END块,因此如果它是空的,您将收到错误Incorrect syntax near 'END'.