如何在IF语句中检查Sql Server存储过程中的参数是空还是空?

时间:2012-09-04 13:32:19

标签: sql sql-server-2005

我读到这个:How do I check if a Sql server string is null or empty但在这种情况下它没有帮助我。

我的存储过程中的代码片段:

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0)
        SELECT @sql = 'SELECT * FROM TEST1'
    ELSE
        SELECT @sql = 'SELECT * FROM TEST2'
 PRINT @sql;

@item1NVARCHAR(1000)类型。

执行此存储过程时,我提供了item1

的值
EXEC    [dbo].[my_proc]
        @item1 = N''

显示

SELECT * FROM TEST1 // @item1 = N'some'

是正确的

而不是

SELECT * FROM TEST2

这是sql中的一个函数来验证字符串是空还是空我在某处犯了错误?

喜欢C# - > string.IsNullOrEmpty(myValue)

3 个答案:

答案 0 :(得分:30)

这是正确的行为。

如果您将@ item1设置为值,则以下表达式将为true

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0)

无论如何,在SQL Server中没有这样的功能,但您可以创建自己的功能:

CREATE FUNCTION dbo.IsNullOrEmpty(@x varchar(max)) returns bit as
BEGIN
IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0
    RETURN 0
ELSE
    RETURN 1
END

答案 1 :(得分:8)

要检查变量是null还是空,请使用以下命令:

IF LEN(ISNULL(@var, '')) = 0
    -- Is empty or NULL
ELSE
    -- Is not empty and is not NULL

答案 2 :(得分:4)

当然有效;在@item1 = N''时,IS NOT NULL

默认情况下,您可以在存储过程的顶部将@item1定义为NULL,然后不传入参数。