zoukankan      html  css  js  c++  java
  • 存储过程的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

    参考文档:

  • 相关阅读:
    cxgrid显示行号
    编写服务端程序的要点
    创建自己的数据库
    cxgrid动态创建footer
    build with runtime package
    TQueue,TStack
    能用图形分析
    Laravel任务调度
    PHP 判断点是否在多边形内
    判断一个点是否在某个区域内。百度,高德,腾讯都能用。(php版)
  • 原文地址:https://www.cnblogs.com/ljhdo/p/12618643.html
Copyright © 2011-2022 走看看