我想创建一个在where子句中使用输入参数的存储过程。参数将为text或null。
即。假设我有一个表[tbl]
Status val
NULL 158
Acc 155
Acc 152
Null 24
Rej 34
在SQL Server中,可以使用
找到空值WHERE Status is NULL
我还希望存储过程能够在参数等于特定值时处理大小写。
WHERE Status = @parameter
如何结合这两种情况?我想要这样的东西。
CREATE PROC test @parameter VARCHAR(10) = ''
SELECT *
FROM [tbl]
IF (@parameter is NULL OR @parameter = '') THEN WHERE STATUS is Null
ELSE WHERE STATUS = @parameter
答案 0 :(得分:1)
只需在WHERE
子句中包含这两个条件,以便获取status having null's
或status having specific value
WHERE Status is NULL
OR Status = @parameter
答案 1 :(得分:1)
WHERE (ISNULL(@parameter,'') = '' AND Status IS NULL)
OR Status = @parameter
如果@Status
不是NULL
,则上半部分只能评估为真。否则它会回落到下半部分。
ISNULL(@Status,'') = ''
与说出@Status IS NULL OR @Status = ''
一样,如果是这样,那么它会匹配Status IS NULL
的行。
看看你的伪代码,你几乎就是那里(我添加的内容是粗体):
((IF
@parameter is NULL OR @parameter = ''
)THEN WHERE
AND
强>STATUS is Null
的)强>
ELSE WHERE
OR
STATUS = @parameter
刚才意识到这可能会更好:
WHERE ISNULL(@parameter, '') = ISNULL(Status, '')
它的工作方式相同,但我不确定ISNULL(Status, '')
是否会阻止使用索引,因此值得检查执行计划。