未设置存储过程默认值

Stored Procedure Default Value Not Being Set

请告诉我我在这个例子中遗漏了什么。

我有一个存储过程,我在其中为参数提供空字符串的默认值。当我检查该值时,它返回为 NULL。我不确定是否未应用默认值,或者我的 ISNULL 检查有误。

这里举个简单的例子来说明:

CREATE PROCEDURE TestDefaultValueParam
@vcTestName varchar(100)= ''
AS
BEGIN
    IF ISNULL(@vcTestName, '') = ''
    BEGIN
        PRINT '@vcTestName IS NULL'
    END
    ELSE
    BEGIN
        PRINT '@vcTestName NOT NULL'
    END
END

我尝试了以下 3 个命令:

EXEC    [dbo].[TestDefaultValueParam]   @vcTestName = NULL
EXEC    [dbo].[TestDefaultValueParam]   @vcTestName = ''
EXEC    [dbo].[TestDefaultValueParam]

尽管存储过程中提供了默认的空字符串,但所有三个结果都是 @vcTestName IS NULL

如果你想要的话,为什么不直接使用 IS NULL

CREATE PROCEDURE TestDefaultValueParam
@vcTestName varchar(100)= ''
AS
BEGIN
    IF @vcTestName IS NULL
    BEGIN
        PRINT '@vcTestName IS NULL'
    END
    ELSE
    BEGIN
        PRINT '@vcTestName NOT NULL'
    END
END;

你的逻辑等同于:

IF @vcTestName IS NULL OR vcTestName = ''

正在测试这两个值。

更改代码中的条件,如下所示:

CREATE PROCEDURE TestDefaultValueParam
@vcTestName varchar(100)= ''
AS
BEGIN
    IF @vcTestName IS NULL
        PRINT '@vcTestName IS NULL'
    ELSEIF @vcTestName = ''
        PRINT '@vcTestName IS SPACE'
    ELSE
        PRINT '@vcTestName NOT NULL'

END

你的 if 语句实际上是说如果它是空字符串或 null,则将其视为空字符串(打印为 null)- 在你的 exec 语句中,你在所有情况下都传递 null 或空字符串,因此符合你的 isnull 逻辑。

declare @string varchar(20)
set @string = ''

select isnull(@string, ''), -- '' would be returned
       @string -- null would be returned.

这意味着,如果@string 为空,则将其视为空字符串。然后你检查空字符串并打印 "string is null"

这里没有代码问题,我只是觉得你可能在放屁?