我有一个存储过程,我正在尝试编写,我想在一次评估不同参数的多个条件。这个的最佳语法是什么?
以下是我所拥有的:
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
答案 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'.