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

    参考文档:

  • 相关阅读:
    LD_PRELOAD的偷梁换柱之能
    ATOM & Sublime Text 下MarkDown插件功能比较
    存在
    2017年执行计划
    2015年总结以及2016年计划
    2014年总结以及2015年计划
    asp.net MVC中form提交和控制器接受form提交过来的数据
    2013年回顾及2014年计划
    c# XML序列化与反序列化
    Namenode HA原理详解(脑裂)
  • 原文地址:https://www.cnblogs.com/ljhdo/p/12618643.html
Copyright © 2011-2022 走看看