我从.aspx.cs页面调用了一个存储过程。我有一个参数,有时无法在调用sproc时发送。因此,我正在做以下事情:
IF @variable is null
BEGIN
...do this...
END
Else
...do that...
我的问题出在IF声明中。据我所知,当我使用以下任何一项时:
if @parameterVariable = null
if @parameterVariable = ''
if @parameterVariable <= 0
什么都没发生!?当我在SSMS中调试sproc时,我发现(即使参数为空(没有用户选择))游标进入并运行ELSE语句中的代码。我做错了吗?
谢谢!
答案 0 :(得分:4)
使用可选参数:
CREATE PROCEDURE uspTest
@param1 varchar(50) = null,
AS
BEGIN
SELECT col1, col2
FROM Table1
WHERE
((@Param1 IS NULL) OR (col1 = @Param1))
END
答案 1 :(得分:3)
if @parameterVariable = null
错了。
将其更改为if @parameterVariable IS NULL
。
这是一个证明这一点的SQL小提琴:http://www.sqlfiddle.com/#!6/6cb42/1
答案 2 :(得分:1)
在SMSS中调试时,必须选中“传递空值”框。否则你的价值是一个空字符串或某些东西。
我一直使用你建议的模式,对我来说效果很好。
答案 3 :(得分:1)
我建议你阅读本页=&gt; ANSI NULLS
实际上if @var = null
没有错,一切都取决于ANSI_NULLS的值:)