【问题标题】:Stored Procedure Output variable returning null when assigning value from itself [duplicate]存储过程输出变量在从自身赋值时返回 null [重复]
【发布时间】:2020-06-18 09:47:13
【问题描述】:

在尝试OUTPUT 变量并为其自身分配变量时,我的 proc 返回 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,代码会给出输出,但这不是我想要的输出。请帮帮我

【问题讨论】:

标签: sql-server tsql stored-procedures


【解决方案1】:

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

  1. 这就是连接在 SQL Server 中的工作方式,NULL + 任何东西 = NULL。所以你需要处理NULL的情况。

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

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

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

注意:您当然可以在 NULL 的情况下输入除空字符串以外的其他内容。

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 2014-04-18
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    相关资源
    最近更新 更多