空字符串是否被视为存储过程中的空参数?
Is an empty string considered an empty parameter in a stored procedure?
我有这个存储过程
ALTER PROC myProcedure
@day VARCHAR (6) = NULL
as
现在如果我这样称呼它
EXEC myProcedure @day= ''
@day
的结果是什么?是空字符串还是NULL?
我的理论是,如果完全省略参数,它将是NULL,但现在它将是空字符串。谁能确认一下?
如果传递空字符串,参数值为空字符串。您可以通过选择如下所示的变量轻松检查
IF OBJECT_ID('myProcedure') IS NOT NULL
DROP PROC myProcedure
GO
CREATE PROC myProcedure
@day VARCHAR (6) = NULL
as
BEGIN
SELECT @day as param
END
GO
--Returns empty string in output
EXEC myProcedure @day= ''
--Returns NULL as output
EXEC myProcedure
注:之所以return为NULL,是因为在过程参数定义中参数默认为NULL。如果省略默认值,则 EXEC myProcedure 将 return 出错。
我有这个存储过程
ALTER PROC myProcedure
@day VARCHAR (6) = NULL
as
现在如果我这样称呼它
EXEC myProcedure @day= ''
@day
的结果是什么?是空字符串还是NULL?
我的理论是,如果完全省略参数,它将是NULL,但现在它将是空字符串。谁能确认一下?
如果传递空字符串,参数值为空字符串。您可以通过选择如下所示的变量轻松检查
IF OBJECT_ID('myProcedure') IS NOT NULL
DROP PROC myProcedure
GO
CREATE PROC myProcedure
@day VARCHAR (6) = NULL
as
BEGIN
SELECT @day as param
END
GO
--Returns empty string in output
EXEC myProcedure @day= ''
--Returns NULL as output
EXEC myProcedure
注:之所以return为NULL,是因为在过程参数定义中参数默认为NULL。如果省略默认值,则 EXEC myProcedure 将 return 出错。