请告诉我这个例子中我缺少的东西。
我有一个存储过程,我为参数提供了一个空字符串的默认值。当我检查该值时,它会以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
。
答案 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,则将其视为空字符串。然后你要检查空字符串并打印"字符串为空"
这里没有代码问题,我只是觉得你有脑屁可能吗?