存储过程默认值未设置

时间:2015-01-23 20:14:01

标签: sql sql-server stored-procedures

请告诉我这个例子中我缺少的东西。

我有一个存储过程,我为参数提供了一个空字符串的默认值。当我检查该值时,它会以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

3 个答案:

答案 0 :(得分:2)

为什么不使用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 = ''

正在测试这两个值。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

你的if语句有效说明它是否为空字符串OR null,则treat为空字符串(print为null) - 在你的exec语句中,你在所有情况下传入null或一个空字符串,因此命中你的isnull逻辑。

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

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

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

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