zoukankan      html  css  js  c++  java
  • Execute SQL Task 第一篇:用法简介

    Execute SQL Task 第一篇:用法简介

    Execute SQL Task 第二篇:返回结果集

    Execute SQL Task 第三篇:参数和变量的映射

    Execute SQL Task组件是SSIS中最重要的Control Flow Task之一,可以直接执行TSQL语句修改数据,例如,可以执行数据更新命令(update,delete,insert),也可以执行select查询语句,把返回的结果存储到变量中。

    一,General 选项卡

    Genernal 选项卡中,配置EXECUTE SQL TASK组件的常用属性。

    1,简单的属性

    TimeOut 选项:指定Task超时的时间,单位是秒,默认值是0,表示超时时间无限长。

    CodePage 选项:指定Code Page,在把Unicode值传递给变量时,用于把字符串值翻译成特定的code page。该选项仅用于OLE DB 和ADO.NET 连接。

    TypeConversionMode选项:如果设置为Allowed,当把输出型参数(output parameter)和查询结果(Single row)赋值给变量时,Execute SQL Task将尝试把输出型参数和查询结果转换为变量的数据类型,这个选项仅适用于单行结果集类型。

    2,返回结果集(Result Set)

    Task组件返回的结果集,

    • None:表示不返回结果,在执行Update,delete或insert命令时,使用该选项;
    • Single row:返回单行结果,可以在Result Set 选项卡中,将结果集返回到1个或多个变量中
    • Full result set:返回多行结果,结果集存储在object对象中
    • XML:返回的结果是XML类型,常用于for xml 子句中。

    如果Execute SQL Task 使用 Full result set, 查询会返回多个行集(multiple rowsets),但是该Task只会获取第一个行集(rowset)。

    2,组件执行的SQL命令(SQL Statement) 

    • ConnectionType:连接到数据源的链接类型,如果是OLEDB链接,选中OLE DB;
    • Connection:链接管理器
    • SQLSourceType:SQL数据源的类型,共有三个选项:Direct Input,File Connection 和 Variable。Direct Input表示:直接输入SQL命令;FileConnection表示:将SQL命令保存在.sql文件中;Variable表示:把SQL命令保存在SSIS的变量中。
    • SQLStatement:要执行的SQL语句,根据SQLSourceType的不同,有三种不同的值:SQL语句,.sql文件路径,或SSIS变量;

     3,举个例子

    如果Execute SQL Task执行的SQL命令是动态变化的,使用Variable选项较好。

    首先创建一个变量,变量的数据类型是String,为变量赋值为有效的TSQL语句:

    设置SQLSourceType 为 Variable 类型,并在SourceVariable中设置保存TSQL语句的变量:

    二,Expressions选项卡

    SSIS Package的属性,既可以在General 选项卡中手动配置,也可以在Expressions 选项卡中通过参数配置。通过表达式配置的属性,最终会覆盖在General选项卡中显式配置的属性。Execute SQL Task的各个属性,都可以在Expression中进行配置,如果把属性的值保存到变量中,那么动态控制Task的执行。

    示例,将SqlStatementSource的值存储在变量中,效果和把SqlSourceType 配置为Variable是一样的,只不过实现方式不同,并且SSIS在执行过程中,使用Expressions的属性覆盖General中配置的属性值。

    三,Result Set选项卡

    Result Set 选项卡用于把Task返回的结果集绑定到变量中,如果ResultSet的类型是None,那么该选项卡是禁用的。

    在General选项卡中,如果把Result Set设置为Single Row,那么Result Name 可以是返回字段的名称,也可以是字段的序号,序号从0开始,

    如果Result Set的类型是 Full result set 或 XML,那么Result Name 必须是字段的序号,序号从0开始。

    四,Parameter Mapping 选项卡

    如果SQL命令在执行的过程中需要传递参数,那么需要在Parameter Mapping 选项卡中进行配置,把变量和参数绑定到一起。变量在SSIS中创建,而参数需要在SQL命令中配置,不同类型的连接管理器,SQL命令中的参数占位符是不同的。

    1,参数的方向(Direction)

    • 如果SQL命令是输出型参数,那么需要设置Direction为Output,表明SQL 命令把参数的值传递给变量;
    • 如果SQL 命令是输入型参数,那么需要设置Direction为Input,表明把变量的值传递给SQL 命令;
    • 如果SQL命令会返回值,那么需要设置Direction为ReturnValue,表明把SP的返回值传递变量。

    2,参数的名称

    如果使用的OLE DB 链接,需要使用 ?代表一个参数,并且在Parameter Mapping 中将parameter name设置为参数的序号,第一个?的序号是0,第二个?的序号是1,参数的序号从0依次递增,通过顺序来匹配。如果使用的是Ado.Net连接管理器,那么参数的命名格式是 @varParameter,使用参数名来匹配。

     详细信息,请阅读《Parameters in the Execute SQL Task

    3,参数的类型

    参数的类型非常丰富,除了NULL和GUID之外,可以分为:

    • 有符号的整数型:SIGNEDCHAR、SHORT、LONG、LARGE_INTEGER
    • 无符号的整数型:BYTE、USHORT、ULONG、ULARGE_INTEGER
    • 精确小数类型:DECIMAL、CURRENCY、NUMERIC、DB_VARNUMERIC
    • 浮点数类型:FLOAT、DOUBLE
    • 布尔值类型:VARIANT_BOOL
    • 字符串类型:VARCHAR、NVARCHAR
    • 日期类型:DATE、DBDATE
    • 时间类型:DBTIME、DBTIME2
    • 日期和时间类型:DBTIMESTAMP、DBTIMESTAMPOFFSET、FILETIME

    对于日期和时间类型,它们的字符串格式如下:

     

    对于OLE DB连接管理器,当需要处理SQL Server数据类型是 date, time, datetime, datetime2, 和 datetimeoffset 时,需要根据参数的方向来设置参数的类型,参数类型的设置有如下规则:

    • 对于输入型参数,参数的类型设置为:NVARCHAR
    • 对于输出型参数,参数的类型设置如下表所示

    五,获取返回值

    从存储过程中获取返回值,有两种方式:通过输出型参数和SP返回的值。设置参数的方向为ReturnValue

    对于OLEDB连接管理器,需要设置以下SQL语句:

    EXEC ? = myStoredProcedure 1

    六,返回的结果集

    在SSIS Package中,使用Execute SQL Task 可以获得SQL语句返回的结果集。

    1,结果集的类型

    指定结果集的类型

    • None:查询不返回任何结果,常见于insert、delete和update命令中。
    • Single row:查询语句只返回单行
    • Full result set:查询语句返回对行
    • XML:查询语句返回的结果集是XML格式,常见于带 FOR XML的SELECT命令中

    如果 Execute SQL task使用 Full result set ,并且查询语句返回多个行集(multiple rowsets),该Task只会获取第一个行集(first rowset)

    2,把结果集绑定到变量

    如果结果集的类型是 single row, rowset, 或 XML,可以把结果集绑定到用户自定义的变量中。

    在参数映射中,Result Name的名称有如下规则:

    • 当结果集的类型是Single row时,使用列名或列的序号(从0开始)把列绑定到变量中。
    • 当结果集的类型是full result set 或XML时,必须使用 0作为结果集的名称。

    结果集和变量的数据类型必须兼容:

    • 对于Single row结果集,行中每列的类型必须和变量的类型相兼容。
    • 对于XML结果集,绑定的变量的数据类型是String 或 Object数据类型。如果变量的类型是String,那么 Execute SQL task 返回字符串类型;如果变量的类型是Object,那么 Execute SQL task 返回的是Document Object Model (DOM) object。
    • 对于Full result set结果集,绑定的变量的数据类型必须是Object数据类型,返回的结果是一个行集对象(rowset object),可以把变量传递给Foreach Loop 容器,通过该Foreach Loop容器逐行抽取表中各行中的列。

    七,返回受影响数据的行数

    ExecValueVariable 属性是Task的标准属性。有些Task在执行完成后,会返回输出结果,为了获取Task的输出结果,我们可以定义一个变量,存储输出结果。Task的ExecValueVariable属性就是用来指定存储Task输出结果的变量名。默认属性值是none,表示task的输出结果不会被存储。

    Execute SQL Task 返回被更新的数据的行数,我们可以为ExecValueVariable属性指定一个变量,用来接收Task的输出值(Execution value),在下游组件中可以引用该变量,获取 Execute SQL Task 更新的数据行数。

    Returns the number of rows affected by the SQL statement(s).The ExecValue is using the @@ROWCOUNT to assign the value of the variable and absent a @@ROWCOUNT the value returned is -1.

    示例 Execute Sql Task的ExecValueVariable 用法

    1,设计Package的Control Flow

    Execute Sql Task的属性:ExecValueVariable的值是变量varCount,该Task执行的SQL语句如下:

    insert into dbo.delay_test
    VALUES(1),(2),(3)
    
    insert into dbo.delay_test
    VALUES(2),(3)

    Task:insert Data执行的SQL语句是,传入的参数是User::varCount

    insert into dbo.dt_test
    values(?)

    2,简称结果

    第一个Task返回的结果是varCount是2,这个结果实际上是@@RowCount,SSIS在执行语句之后,将@@RowCount赋值到Execute SQL Task 属性ExecValueVariable指定的变量中。

    参考文档:

    Execute SQL Task

  • 相关阅读:
    20个最佳的Java集合框架面试题目
    SSL/TLS 加密新纪元
    NServiceBus-日志
    NServiceBus-容器
    NServiceBus-网关和多站点分布
    NServiceBus-性能测试
    NServiceBus教程-持久化配置
    NServiceBus教程-持久化
    NServiceBus教程-NServiceBus和WCF
    NServiceBus教程-消息传递与处理
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4421758.html
Copyright © 2011-2022 走看看