4

我有一个从 .aspx.cs 页面调用的存储过程。我有一个参数,有时在调用 sproc 时无法发送。因此,我正在执行以下操作:

 IF @variable is null
     BEGIN
         ...do this...
     END
 Else 
         ...do that...

我的问题出在 IF 语句中。据我所知,当我使用以下任何一种时:

  • if @parameterVariable = null
  • if @parameterVariable = ''
  • if @parameterVariable <= 0

什么都没发生!?当我在 SSMS 中调试存储过程时,我发现(即使参数为空(没有用户选择))光标转到并运行 ELSE 语句中的代码。难道我做错了什么?

谢谢!

4

4 回答 4

5

使用可选参数:

 CREATE PROCEDURE uspTest
    @param1 varchar(50) = null,

AS
    BEGIN
        SELECT col1, col2
        FROM Table1
        WHERE
                ((@Param1 IS NULL) OR (col1 = @Param1)) 
    END
于 2012-11-16T19:26:18.957 回答
3

if @parameterVariable = null是错的。将其更改为if @parameterVariable IS NULL.

这是一个演示这个的 SQL Fiddle:http ://www.sqlfiddle.com/#!6/6cb42/1

于 2012-11-16T19:27:40.840 回答
1

在 SMSS 中调试时,您必须选中“传递空值”框。否则你的值是一个空字符串或类似的东西。

我一直使用你建议的模式,它对我很有效。

于 2012-11-16T19:27:51.590 回答
1

我建议您阅读此页面 => ANSI NULLS

其实if @var = null没有错,一切都取决于 ANSI_NULLS 的值 :)

于 2012-11-16T19:42:44.180 回答