如何在if语句中检查Sql Server存储过程中的参数是否为空或null?

如何在if语句中检查Sql Server存储过程中的参数是否为空或null?,sql,sql-server-2005,Sql,Sql Server 2005,我读到:但在这种情况下,这对我没有帮助 存储过程中的一段代码: IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0) SELECT @sql = 'SELECT * FROM TEST1' ELSE SELECT @sql = 'SELECT * FROM TEST2' PRINT @sql; @项目1为NVARCHAR1000类型 在执行此存储过程时,我为item1提供了值 它表明 从TEST1/中选择*如果

我读到:但在这种情况下,这对我没有帮助

存储过程中的一段代码:

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0)
        SELECT @sql = 'SELECT * FROM TEST1'
    ELSE
        SELECT @sql = 'SELECT * FROM TEST2'
 PRINT @sql;
@项目1为NVARCHAR1000类型

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

它表明

从TEST1/中选择*如果@item1=N'some'

而不是

从TEST2中选择*

它是sql中的某个函数,用于验证字符串是否为null或空,或者我是否在某个地方出错


就像在C->string.isNullOrEmptyValue中一样,这是正确的行为

如果将@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

这当然有效;当@item1=N时,它不为空


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

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

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

解决了的。问题出在他身上。所以我改为和。是的,我的错误是在或代替了和。我喜欢这个想法,但很想用其他方法测试io性能。
IF LEN(ISNULL(@var, '')) = 0
    -- Is empty or NULL
ELSE
    -- Is not empty and is not NULL