SSIS中ExecuteSQL TASK组件
基于2005 CTP 4月版
在此文中将让你明白ExecuteSQL task组件在SSIS中的功能和作用,我将介绍下面内容:
关于任务
关于任务的属性
看完这些介绍后我将举出下面例子:
从一个有2个输入参数的SQL查询中返回一个简单的值
从一个SQL查询中返回一个记录集
执行一个存储过程并接收一个记录集、返回值、输出参数和传送一个输入参数
从SQL查询中返回XML
从一个变量中执行SQL句子
从一个文件中执行SQL句子
关于任务:
我们可以从下图中找到ExecuteSQL TASK组件

现在我们拖曳它在设计器上,可以看出它会提示你“当前组件没有指定连接”,如图

我们可以很容易的给它指定连接,双击它,如图

这样我们可以选择不同的连接类型
和2000的DTS不同,SSIS有能力把XML作为结果集返回,如图

然后你可以指定你要执行SQL的来源类型,比如是直接输入还是来自文件还是变量

如果是来源是直接输入的话,你可以输入SQL语句在 SQLStatement 属性中(点击旁边的省略号弹出输入窗口)

任务的常见属性说明
BypassPrepare
是否在在发送到连接前分析SQL句子
Connection
指定执行SQL的连接
DelayValidation
是否延迟验证SQL的有效性,如果使用了只有在当前任务中产生的表(或其他对象)的话,则可启用当前属性
Description
中文描述
Disable
是否禁止当前任务
DisableEventHandlers
是否禁止事件触发
ExecValueVariable
如果任务来源为变量的话,则需要设置该属性
Expressions
用于给某些属性设置一个动态的表达式,这样可以使任务更加灵活,如图

FailPackageOnFailure
是否设置如果当前任务执行故障则整个包执行失败
FailParentOnFailure
是否设置如果当前任务执行故障则其父容器执行失败
IsolationLevel
事务隔离级别
IsStoredProcedure
是否为存储过程
TimeOut
超时设置
使用例子
1、从一个有2个输入参数的SQL查询中返回一个简单的值
首先我们要添加一些变量到包中,并为这些变量指定初始值,如图

CountOfEmployees 为输出参数
EndDate 和StartDate 为输入参数
在上图中你可以看得定义的变量有一个作用范围,父容器定义的变量子可以使用,反之不行(可以把包看出容器)
确定了变量后,我们需要为任务指定连接
然后我们选择SQLSourceType 属性为直接输入,然后在SQLStatement属性中输入如下句子,并指定返回结果为简单行
SELECT COUNT(*) AS CountOfEmployees FROM HumanResources.Employee WHERE (HireDate BETWEEN ? AND ?)
设置后的结果如图

现在把指定的输入参数映射到变量,如图
然后把SQL产生的输出也映射到变量,如图

OK,就这样,第一个例子完成了,调试运行把, 可以看得下面的结果

看到了么,CountOfEmployees 变量的值由初始的0变成了2
2、返回一个记录集
这个例子中我们将返回一个记录集到一个变量(rsProducts),没有输入参数,有个返回的是一个记录集,故变量的类型需定义为object类型,初始值当然也为system.object了,如图

然后在SQLStatement 属性中输入如下SELECT语句返回一个记录集,并指定返回结果为记录集


之后当然也是参数映射了,如图

好了,运行调试把,我们将看得结果集被作用一个COM对象返回

3、执行一个存储过程并接收一个记录集、返回值、输出参数和传送一个输入参数
在这个例子中,我们将需要4个变量,一个为返回值,一个为输入,一个为输出,一个为记录集,我们将输入如下SQL句子
EXEC ?=dbo.sp_showAccountinCity ?,?output
然后进行参数映射,如图


可以看出上面操作是非常简单,比2000的DTS强多了
4、从SQL查询中返回XML
从SQL中返回XML其实也大同小异,只需要稍微改一下即可
首先变量的类型依然是object,然后只需指定返回类型为XML即可
5、从一个变量中执行SQL句子
这也非常简单,首先定义一个变量,如user::statemenet,其为字符型,如图

然后设置SQL来源类型为变量,在SQLStatement属性输入 user::statemenet即可

6、从一个文件中执行SQL句子
基本上同5差不多
但首先应该建立一个文件类型的来源

然后指定SQL来源类型为文件,然后指定文件来源就行了

总结
好了,就写到此了,希望你能够喜欢
该文的英文来源于 http://www.sqlis.com/default.aspx?58