Sql Server 2012使用where子句为null或输入参数的存储过程查询

时间:2014-05-28 19:41:49

标签: sql sql-server stored-procedures

我想创建一个在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

2 个答案:

答案 0 :(得分:1)

只需在WHERE子句中包含这两个条件,以便获取status having null'sstatus 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, '')是否会阻止使用索引,因此值得检查执行计划。