SSIS中ExecuteSQL TASK组件
基于2005 CTP 4月版
在此文中将让你明白ExecuteSQL task组件在SSIS中的功能和作用,我将介绍下面内容:
关于任务
关于任务的属性
看完这些介绍后我将举出下面例子:
从一个有2个输入参数的SQL查询中返回一个简单的值
从一个SQL查询中返回一个记录集
执行一个存储过程并接收一个记录集、返回值、输出参数和传送一个输入参数
从SQL查询中返回XML
从一个变量中执行SQL句子
从一个文件中执行SQL句子
关于任务:
我们可以从下图中找到ExecuteSQL TASK组件
![](http://www.sqlis.com/images/ExecuteSQLTask/Tour/WhereToFindTheTask.jpg)
现在我们拖曳它在设计器上,可以看出它会提示你“当前组件没有指定连接”,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Tour/InitialDrop.jpg)
我们可以很容易的给它指定连接,双击它,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Tour/ConnectionTypes.jpg)
这样我们可以选择不同的连接类型
和2000的DTS不同,SSIS有能力把XML作为结果集返回,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Tour/Resultsettypesdisplayed.jpg)
然后你可以指定你要执行SQL的来源类型,比如是直接输入还是来自文件还是变量
![](http://www.sqlis.com/images/ExecuteSQLTask/Tour/SourceTypeForQuery.jpg)
如果是来源是直接输入的话,你可以输入SQL语句在 SQLStatement 属性中(点击旁边的省略号弹出输入窗口)
![](http://www.sqlis.com/images/ExecuteSQLTask/Tour/SQLQueryEditor.jpg)
任务的常见属性说明
BypassPrepare
是否在在发送到连接前分析SQL句子
Connection
指定执行SQL的连接
DelayValidation
是否延迟验证SQL的有效性,如果使用了只有在当前任务中产生的表(或其他对象)的话,则可启用当前属性
Description
中文描述
Disable
是否禁止当前任务
DisableEventHandlers
是否禁止事件触发
ExecValueVariable
如果任务来源为变量的话,则需要设置该属性
Expressions
用于给某些属性设置一个动态的表达式,这样可以使任务更加灵活,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Properties/PropertyExpressions.jpg)
FailPackageOnFailure
是否设置如果当前任务执行故障则整个包执行失败
FailParentOnFailure
是否设置如果当前任务执行故障则其父容器执行失败
IsolationLevel
事务隔离级别
IsStoredProcedure
是否为存储过程
TimeOut
超时设置
使用例子
1、从一个有2个输入参数的SQL查询中返回一个简单的值
首先我们要添加一些变量到包中,并为这些变量指定初始值,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1ParametersSet.jpg)
CountOfEmployees 为输出参数
EndDate 和StartDate 为输入参数
在上图中你可以看得定义的变量有一个作用范围,父容器定义的变量子可以使用,反之不行(可以把包看出容器)
确定了变量后,我们需要为任务指定连接
然后我们选择SQLSourceType 属性为直接输入,然后在SQLStatement属性中输入如下句子,并指定返回结果为简单行
SELECT COUNT(*) AS CountOfEmployees FROM HumanResources.Employee WHERE (HireDate BETWEEN ? AND ?)
设置后的结果如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1ShowStatement.jpg)
现在把指定的输入参数映射到变量,如图
然后把SQL产生的输出也映射到变量,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1ResultSet.jpg)
OK,就这样,第一个例子完成了,调试运行把, 可以看得下面的结果
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1WatchWindow.jpg)
看到了么,CountOfEmployees 变量的值由初始的0变成了2
2、返回一个记录集
这个例子中我们将返回一个记录集到一个变量(rsProducts),没有输入参数,有个返回的是一个记录集,故变量的类型需定义为object类型,初始值当然也为system.object了,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex2/VariablesExample2.jpg)
然后在SQLStatement 属性中输入如下SELECT语句返回一个记录集,并指定返回结果为记录集
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2ShowStatement.jpg)
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2ResultsetOnGeneralTab.jpg)
之后当然也是参数映射了,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2ResultsetMap.jpg)
好了,运行调试把,我们将看得结果集被作用一个COM对象返回
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2WatchWindow.jpg)
3、执行一个存储过程并接收一个记录集、返回值、输出参数和传送一个输入参数
在这个例子中,我们将需要4个变量,一个为返回值,一个为输入,一个为输出,一个为记录集,我们将输入如下SQL句子
EXEC ?=dbo.sp_showAccountinCity ?,?output
然后进行参数映射,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex3/Example3ParamMap.jpg)
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex3/Example3ResultSet.jpg)
可以看出上面操作是非常简单,比2000的DTS强多了
4、从SQL查询中返回XML
从SQL中返回XML其实也大同小异,只需要稍微改一下即可
首先变量的类型依然是object,然后只需指定返回类型为XML即可
5、从一个变量中执行SQL句子
这也非常简单,首先定义一个变量,如user::statemenet,其为字符型,如图
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex5/Example5ParametersSet.jpg)
然后设置SQL来源类型为变量,在SQLStatement属性输入 user::statemenet即可
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex5/Example5ShowStatement.jpg)
6、从一个文件中执行SQL句子
基本上同5差不多
但首先应该建立一个文件类型的来源
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex6/Example6FileSetup.jpg)
然后指定SQL来源类型为文件,然后指定文件来源就行了
![](http://www.sqlis.com/images/ExecuteSQLTask/Ex6/Example6ShowStatement.jpg)
总结
好了,就写到此了,希望你能够喜欢
该文的英文来源于 http://www.sqlis.com/default.aspx?58