【问题标题】:How do check if a parameter is empty or null in Sql Server stored procedure in IF statement?如何在IF语句的Sql Server存储过程中检查参数是否为空或null?
【发布时间】:2012-09-04 13:32:19
【问题描述】:

我读到了这个: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)

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    这是正确的行为。

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

    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
    

    【讨论】:

    • 是的,我的错误是在OR 而不是AND
    【解决方案2】:

    要检查变量是否为空或为空,请使用:

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

    【讨论】:

    • 我喜欢这个想法,但很想用其他方法测试 io 性能。
    【解决方案3】:

    当然可以;当@item1 = N'',它IS NOT NULL

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

    【讨论】:

    • 已解决。问题是OR。于是我改成了AND
    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多