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

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
    Python位运算符
  • 原文地址:https://www.cnblogs.com/ljhdo/p/4421758.html
Copyright © 2011-2022 走看看