25

我读到这个:如何检查 Sql 服务器字符串是否为空或为空,但在这种情况下它对我没有帮助。

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

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)

4

3 回答 3

45

这是正确的行为。

如果您将 @ 设置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
于 2012-09-04T13:34:57.100 回答
13

要检查变量是否为空或为空,请使用以下命令:

IF LEN(ISNULL(@var, '')) = 0
    -- Is empty or NULL
ELSE
    -- Is not empty and is not NULL
于 2016-06-16T18:09:37.323 回答
4

当然可以;什么时候@item1 = N'',它IS NOT NULL

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

于 2012-09-04T13:35:02.153 回答