存储过程输出变量在从自身赋值时返回 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
,代码会给出输出,但这不是我想要的输出。请帮助我
我怀疑有两个因素导致了这种情况。
这就是 SQL 服务器中串联的工作方式,NULL
+ 任何东西 = NULL
。所以你需要处理 NULL
的情况。
您提供的默认值仅在您不提供参数时有效,如您的第一个示例所示。但是当您提供参数时它会被忽略,即使它是 NULL
,如您的第二个示例所示。
为了完整起见,我建议同时处理 @OUT
和 @IN
,例如
SET @OUT = COALESCE(@OUT,'') + '-' + COALESCE(@IN,'');
注意:对于 NULL
的情况,您当然可以输入空字符串以外的内容。
在尝试 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
,代码会给出输出,但这不是我想要的输出。请帮助我
我怀疑有两个因素导致了这种情况。
这就是 SQL 服务器中串联的工作方式,
NULL
+ 任何东西 =NULL
。所以你需要处理NULL
的情况。您提供的默认值仅在您不提供参数时有效,如您的第一个示例所示。但是当您提供参数时它会被忽略,即使它是
NULL
,如您的第二个示例所示。
为了完整起见,我建议同时处理 @OUT
和 @IN
,例如
SET @OUT = COALESCE(@OUT,'') + '-' + COALESCE(@IN,'');
注意:对于 NULL
的情况,您当然可以输入空字符串以外的内容。