net*_*rog 4 sql-server stored-procedures
我有一个存储过程,其输出参数我用"0"初始化:
ALTER PROCEDURE dbo.SomeProcedure
@someparam INT = 0 OUT
...
Run Code Online (Sandbox Code Playgroud)
但是,当过程在执行期间未修改或设置该参数时,输出值为NULL,而不是预期的"0".
是否必须在过程代码中设置默认值
SET @someparam = 0;
Run Code Online (Sandbox Code Playgroud)
并避免声明中的初始化?
为什么SQL Server允许在输出参数的声明中使用默认值呢?
您显示的语法不是用于初始化,而是用于缺少参数的默认值:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11242 次 |
最近记录: |