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

    参考文档:

  • 相关阅读:
    mysql 4 索引的优缺点
    mysql 分析5语句的优化--索引添加删除
    mysql 分析3使用分析sql 性能 show profiles ;
    mysql 分析2 show processlist ;
    mysql 分析第一步
    Mysql清理二进制日志的技巧
    做项目的一点自己的想法 在开发中我觉得可以修改的地方
    如何删除表中的重复记录只保留其中一条?
    AJAX载入外部JS文件到页面并让其执行的方法(附源码)
    mysql 主从同步 实现增量备份
  • 原文地址:https://www.cnblogs.com/ljhdo/p/12618643.html
Copyright © 2011-2022 走看看