存储过程输出变量在从自身赋值时返回 null

Stored Procedure Output variable returning null when assigning value from itself

在尝试 OUTPUT 变量时,将变量本身赋给了我的 proc returns null。该值在 OUTPUT 变量中正确分配,并且在我不提供可选输出时有效。请检查以下代码

ALTER PROC [DBO].TEST (
    @IN NVARCHAR(10) ,
    @OUT NVARCHAR(MAX) = 'JAMES' OUTPUT)
AS
BEGIN
    SET @OUT = @OUT + '-' + @IN
    PRINT @OUT
END

---This Works
EXEC TEST 'BOND'
--OUTPUT : JASMES-BOND

---This doesn't Work
DECLARE @OUT1 NVARCHAR(MAX)
EXEC TEST 'BOND', @OUT1 OUTPUT
PRINT @OUT1
-- No Error, No Output

如果我将语句 SET @OUT = @OUT + '-' + @IN 更改为 SET @OUT = '-' + @IN,代码会给出输出,但这不是我想要的输出。请帮助我

我怀疑有两个因素导致了这种情况。

  1. 这就是 SQL 服务器中串联的工作方式,NULL + 任何东西 = NULL。所以你需要处理 NULL 的情况。

  2. 您提供的默认值仅在您不提供参数时有效,如您的第一个示例所示。但是当您提供参数时它会被忽略,即使它是 NULL,如您的第二个示例所示。

为了完整起见,我建议同时处理 @OUT@IN,例如

SET @OUT = COALESCE(@OUT,'') + '-' + COALESCE(@IN,'');

注意:对于 NULL 的情况,您当然可以输入空字符串以外的内容。