我的存储过程采用如下可选参数:
CREATE PROCEDURE MyProc
(
@P1 varchar(255) = NULL
)
AS
SELECT * FROM MyTable WHERE MyField = @P1
当@P1
为NULL
时,我想选择所有记录。一个显而易见的方法是在这里使用IF
,但我想在一个SQL语句中执行此操作。有人可以建议一个聪明的方法来实现这一目标吗?我正在考虑使用ISNULL()
或MyField = MyField
。也试过了几种方法,但NULL = NULL
不是True
的事实是这里的主要封锁。
答案 0 :(得分:4)
一种方式:
SELECT * FROM MyTable WHERE @P1 IS NULL OR MyField = @P1
使用If...Else
的另一种可能更有效的方法:
if(@P1 IS NULL)
begin
SELECT * FROM MyTable
End
Else
begin
SELECT * FROM MyTable WHERE MyField = @P1
End
答案 1 :(得分:0)
WHERE MyField = ISNULL(@P1, MyField)
那应该得到你需要的东西。
答案 2 :(得分:0)
其他答案为您提供了直接解决方案,但您需要使用null:
您不能对=
使用等式(<>
)和不等式(NULL
)运算符,因为SQL将NULL
视为一个永远不等于任何东西的独特值(甚至本身 - null = null
是假的!)。
而是使用value is null
和value is not null
分别检查null或not null。