存储过程的output参数

在SSIS的Execute SQL Task组件中执行存储过程,想要返回单行的结果,总是无法返回查询的结果,返回的错误是无法把DBNull转换为String类型:

The type of the value (DBNull) being assigned to variable "User::MailBody" differs from the current variable type (String). Variables may not change type during execution. Variable types are strict, except for variables of type Object

对于这个错误,暂不做深入的调查。存储过程返回执行的结果,可以是通过返回值、基础表来实现,当然也可以通过output参数来实现。

在创建存储过程时,必须通过output关键字显式声明输出型参数。对于输出型参数,既可以接收值,也既可以不接收值,但是必须被赋值为变量,用于向外输出结果。没有用output关键字声明的参数是输入型参数,对于输入型参数,只接收值,不向外输出结果。

第一步:在存储过程中定义output参数 @para,声明输出型参数的格式如下所示:

@para data_type output

举个例子,创建一个存储过程,定义参数@p2为输出型参数,默认情况下,@p1是输入型参数:

create proc sp_name 
    @p1 int,
    @p2 int output

第二步:在存储过程中对output参数赋值,注意,在存储过程返回前,必须对output参数赋值,否则存储过程会抛出异常

set @p2=value

第三步:调用存储过程,获得output参数的值

声明一个变量@var,通过变量来获得output参数的值,注意:在调用存储过程时,必须通过output关键字显式声明输出参数。

declare @var data_type
exec sp_name @p1=1, @p2 = @var output

对于output参数,必须赋值为变量,变量可以初始化,也可以不初始化。

1,当变量被初始化时

如果变量已经初始化,那么输出型参数接收了变量的值,和普通的输入型参数的用法相同,可以在存储过程中直接引用output参数的值。如下所示,可以在存储过程sp_name中引用@p2的值:

declare @var data_type
set @var=2

exec sp_name @p1=1, @p2 = @var output

2,当变量未初始化时

如果变量未被初始化,那么在存储过程中,不可以直接引用output参数的值,只有输出参数@p2被赋值之后,才可以引用。

declare @var data_type

exec sp_name @p1=1, @p2 = @var output

参考文档:

原文地址:https://www.cnblogs.com/ljhdo/p/12618643.html