空字符串是否被视为存储过程中的空参数?

时间:2015-03-25 08:36:16

标签: sql-server tsql stored-procedures

我有这个存储过程

ALTER PROC myProcedure 
    @day VARCHAR (6) = NULL
as

现在,如果我这样称呼它

EXEC myProcedure @day= ''

@day的结果是什么?它会是空字符串还是NULL?

我的理论是,如果参数被完全省略,它将为NULL,但现在它将是空字符串。任何人都可以确认吗?

1 个答案:

答案 0 :(得分:1)

如果传递空字符串,则param值为空字符串。您可以通过选择变量轻松检查,如下所示

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

注意:返回NULL的原因是因为参数在过程参数定义中默认为NULL。如果省略默认值,则EXEC myProcedure将返回错误。