【问题标题】:Initialize output parameters in stored procedure在存储过程中初始化输出参数
【发布时间】:2012-11-14 09:12:49
【问题描述】:

我有一个带有输出参数的存储过程,我用“0”初始化:

ALTER PROCEDURE dbo.SomeProcedure
    @someparam INT = 0 OUT
...

但是,当过程在执行期间没有修改或设置该参数时,输出值为NULL,而不是预期的“0”。

是否必须在程序代码中设置默认值

SET @someparam = 0; 

并避免声明中的初始化?

那么为什么 SQL Server 允许在声明输出参数时使用默认值?

【问题讨论】:

  • default 值仅用于 incoming 方向 - 您可以为进入过程的值提供默认值。它们对事物的输出端没有影响......就是这样

标签: sql-server stored-procedures


【解决方案1】:

您显示的语法不是用于初始化,而是用于default values for missing parameters

default 参数的默认值。如果定义了默认值 对于参数,可以在不指定参数的情况下执行过程 该参数的值

那么应该清楚的是,如果您可以读取输出值,则一定是您为@someparam 提供了一个参数,因此它不是“缺失”的。如果不是“缺失”,则不会为其分配默认值,因为它必须已经有一个值,即来自调用者框架的值(可能为 NULL)。 QED。

以下代码显示了差异并举例说明了您看到的行为:

create procedure usp_test
    @p int = 0 output
as
    set @p += 1;
    select @p;
go

exec usp_test;
go


declare @unitialized int;
exec usp_test @unitialized output;
go

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多