未设置存储过程默认值
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"
这里没有代码问题,我只是觉得你可能在放屁?
请告诉我我在这个例子中遗漏了什么。
我有一个存储过程,我在其中为参数提供空字符串的默认值。当我检查该值时,它返回为 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"
这里没有代码问题,我只是觉得你可能在放屁?