SSIS中ExecuteSQL TASK組件
基于2005 CTP 4月版
在此文中將讓你明白ExecuteSQL task組件在SSIS中的功能和作用,我將介紹下面內(nèi)容:
關(guān)于任務(wù)
關(guān)于任務(wù)的屬性
看完這些介紹后我將舉出下面例子:
從一個(gè)有2個(gè)輸入?yún)?shù)的SQL查詢中返回一個(gè)簡(jiǎn)單的值
從一個(gè)SQL查詢中返回一個(gè)記錄集
執(zhí)行一個(gè)存儲(chǔ)過(guò)程并接收一個(gè)記錄集、返回值、輸出參數(shù)和傳送一個(gè)輸入?yún)?shù)
從SQL查詢中返回XML
從一個(gè)變量中執(zhí)行SQL句子
從一個(gè)文件中執(zhí)行SQL句子
關(guān)于任務(wù):
我們可以從下圖中找到ExecuteSQL TASK組件

現(xiàn)在我們拖曳它在設(shè)計(jì)器上,可以看出它會(huì)提示你“當(dāng)前組件沒(méi)有指定連接”,如圖

我們可以很容易的給它指定連接,雙擊它,如圖

這樣我們可以選擇不同的連接類型
和2000的DTS不同,SSIS有能力把XML作為結(jié)果集返回,如圖

然后你可以指定你要執(zhí)行SQL的來(lái)源類型,比如是直接輸入還是來(lái)自文件還是變量

如果是來(lái)源是直接輸入的話,你可以輸入SQL語(yǔ)句在 SQLStatement 屬性中(點(diǎn)擊旁邊的省略號(hào)彈出輸入窗口)

任務(wù)的常見(jiàn)屬性說(shuō)明
BypassPrepare
是否在在發(fā)送到連接前分析SQL句子
Connection
指定執(zhí)行SQL的連接
DelayValidation
是否延遲驗(yàn)證SQL的有效性,如果使用了只有在當(dāng)前任務(wù)中產(chǎn)生的表(或其他對(duì)象)的話,則可啟用當(dāng)前屬性
Description
中文描述
Disable
是否禁止當(dāng)前任務(wù)
DisableEventHandlers
是否禁止事件觸發(fā)
ExecValueVariable
如果任務(wù)來(lái)源為變量的話,則需要設(shè)置該屬性
Expressions
用于給某些屬性設(shè)置一個(gè)動(dòng)態(tài)的表達(dá)式,這樣可以使任務(wù)更加靈活,如圖

FailPackageOnFailure
是否設(shè)置如果當(dāng)前任務(wù)執(zhí)行故障則整個(gè)包執(zhí)行失敗
FailParentOnFailure
是否設(shè)置如果當(dāng)前任務(wù)執(zhí)行故障則其父容器執(zhí)行失敗
IsolationLevel
事務(wù)隔離級(jí)別
IsStoredProcedure
是否為存儲(chǔ)過(guò)程
TimeOut
超時(shí)設(shè)置
使用例子
1、從一個(gè)有2個(gè)輸入?yún)?shù)的SQL查詢中返回一個(gè)簡(jiǎn)單的值
首先我們要添加一些變量到包中,并為這些變量指定初始值,如圖

CountOfEmployees 為輸出參數(shù)
EndDate 和StartDate 為輸入?yún)?shù)
在上圖中你可以看得定義的變量有一個(gè)作用范圍,父容器定義的變量子可以使用,反之不行(可以把包看出容器)
確定了變量后,我們需要為任務(wù)指定連接
然后我們選擇SQLSourceType 屬性為直接輸入,然后在SQLStatement屬性中輸入如下句子,并指定返回結(jié)果為簡(jiǎn)單行
SELECT COUNT(*) AS CountOfEmployees FROM HumanResources.Employee WHERE (HireDate BETWEEN ? AND ?)
設(shè)置后的結(jié)果如圖

現(xiàn)在把指定的輸入?yún)?shù)映射到變量,如圖
然后把SQL產(chǎn)生的輸出也映射到變量,如圖

OK,就這樣,第一個(gè)例子完成了,調(diào)試運(yùn)行把, 可以看得下面的結(jié)果

看到了么,CountOfEmployees 變量的值由初始的0變成了2
2、返回一個(gè)記錄集
這個(gè)例子中我們將返回一個(gè)記錄集到一個(gè)變量(rsProducts),沒(méi)有輸入?yún)?shù),有個(gè)返回的是一個(gè)記錄集,故變量的類型需定義為object類型,初始值當(dāng)然也為system.object了,如圖

然后在SQLStatement 屬性中輸入如下SELECT語(yǔ)句返回一個(gè)記錄集,并指定返回結(jié)果為記錄集


之后當(dāng)然也是參數(shù)映射了,如圖

好了,運(yùn)行調(diào)試把,我們將看得結(jié)果集被作用一個(gè)COM對(duì)象返回

3、執(zhí)行一個(gè)存儲(chǔ)過(guò)程并接收一個(gè)記錄集、返回值、輸出參數(shù)和傳送一個(gè)輸入?yún)?shù)
在這個(gè)例子中,我們將需要4個(gè)變量,一個(gè)為返回值,一個(gè)為輸入,一個(gè)為輸出,一個(gè)為記錄集,我們將輸入如下SQL句子
EXEC ?=dbo.sp_showAccountinCity ?,?output
然后進(jìn)行參數(shù)映射,如圖


可以看出上面操作是非常簡(jiǎn)單,比2000的DTS強(qiáng)多了
4、從SQL查詢中返回XML
從SQL中返回XML其實(shí)也大同小異,只需要稍微改一下即可
首先變量的類型依然是object,然后只需指定返回類型為XML即可
5、從一個(gè)變量中執(zhí)行SQL句子
這也非常簡(jiǎn)單,首先定義一個(gè)變量,如user::statemenet,其為字符型,如圖

然后設(shè)置SQL來(lái)源類型為變量,在SQLStatement屬性輸入 user::statemenet即可

6、從一個(gè)文件中執(zhí)行SQL句子
基本上同5差不多
但首先應(yīng)該建立一個(gè)文件類型的來(lái)源

然后指定SQL來(lái)源類型為文件,然后指定文件來(lái)源就行了

總結(jié)
好了,就寫(xiě)到此了,希望你能夠喜歡
該文的英文來(lái)源于 http://www.sqlis.com/default.aspx?58