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

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 出错。