SSIS中ExecuteSQL TASK組件
基于2005 CTP 4月版
在此文中將讓你明白ExecuteSQL task組件在SSIS中的功能和作用,我將介紹下面內容:
關于任務
關于任務的屬性
看完這些介紹后我將舉出下面例子:
從一個有2個輸入?yún)?shù)的SQL查詢中返回一個簡單的值
從一個SQL查詢中返回一個記錄集
執(zhí)行一個存儲過程并接收一個記錄集、返回值、輸出參數(shù)和傳送一個輸入?yún)?shù)
從SQL查詢中返回XML
從一個變量中執(zhí)行SQL句子
從一個文件中執(zhí)行SQL句子
關于任務:
我們可以從下圖中找到ExecuteSQL TASK組件
現(xiàn)在我們拖曳它在設計器上,可以看出它會提示你“當前組件沒有指定連接”,如圖
我們可以很容易的給它指定連接,雙擊它,如圖
這樣我們可以選擇不同的連接類型
和2000的DTS不同,SSIS有能力把XML作為結果集返回,如圖
然后你可以指定你要執(zhí)行SQL的來源類型,比如是直接輸入還是來自文件還是變量
如果是來源是直接輸入的話,你可以輸入SQL語句在 SQLStatement 屬性中(點擊旁邊的省略號彈出輸入窗口)
任務的常見屬性說明
BypassPrepare
是否在在發(fā)送到連接前分析SQL句子
Connection
指定執(zhí)行SQL的連接
DelayValidation
是否延遲驗證SQL的有效性,如果使用了只有在當前任務中產生的表(或其他對象)的話,則可啟用當前屬性
Description
中文描述
Disable
是否禁止當前任務
DisableEventHandlers
是否禁止事件觸發(fā)
ExecValueVariable
如果任務來源為變量的話,則需要設置該屬性
Expressions
用于給某些屬性設置一個動態(tài)的表達式,這樣可以使任務更加靈活,如圖
FailPackageOnFailure
是否設置如果當前任務執(zhí)行故障則整個包執(zhí)行失敗
FailParentOnFailure
是否設置如果當前任務執(zhí)行故障則其父容器執(zhí)行失敗
IsolationLevel
事務隔離級別
IsStoredProcedure
是否為存儲過程
TimeOut
超時設置
使用例子
1、從一個有2個輸入?yún)?shù)的SQL查詢中返回一個簡單的值
首先我們要添加一些變量到包中,并為這些變量指定初始值,如圖
CountOfEmployees 為輸出參數(shù)
EndDate 和StartDate 為輸入?yún)?shù)
在上圖中你可以看得定義的變量有一個作用范圍,父容器定義的變量子可以使用,反之不行(可以把包看出容器)
確定了變量后,我們需要為任務指定連接
然后我們選擇SQLSourceType 屬性為直接輸入,然后在SQLStatement屬性中輸入如下句子,并指定返回結果為簡單行
SELECT COUNT(*) AS CountOfEmployees FROM HumanResources.Employee WHERE (HireDate BETWEEN ? AND ?)
設置后的結果如圖
現(xiàn)在把指定的輸入?yún)?shù)映射到變量,如圖
然后把SQL產生的輸出也映射到變量,如圖
OK,就這樣,第一個例子完成了,調試運行把, 可以看得下面的結果
看到了么,CountOfEmployees 變量的值由初始的0變成了2
2、返回一個記錄集
這個例子中我們將返回一個記錄集到一個變量(rsProducts),沒有輸入?yún)?shù),有個返回的是一個記錄集,故變量的類型需定義為object類型,初始值當然也為system.object了,如圖
然后在SQLStatement 屬性中輸入如下SELECT語句返回一個記錄集,并指定返回結果為記錄集
之后當然也是參數(shù)映射了,如圖
好了,運行調試把,我們將看得結果集被作用一個COM對象返回
3、執(zhí)行一個存儲過程并接收一個記錄集、返回值、輸出參數(shù)和傳送一個輸入?yún)?shù)
在這個例子中,我們將需要4個變量,一個為返回值,一個為輸入,一個為輸出,一個為記錄集,我們將輸入如下SQL句子
EXEC ?=dbo.sp_showAccountinCity ?,?output
然后進行參數(shù)映射,如圖
可以看出上面操作是非常簡單,比2000的DTS強多了
4、從SQL查詢中返回XML
從SQL中返回XML其實也大同小異,只需要稍微改一下即可
首先變量的類型依然是object,然后只需指定返回類型為XML即可
5、從一個變量中執(zhí)行SQL句子
這也非常簡單,首先定義一個變量,如user::statemenet,其為字符型,如圖
然后設置SQL來源類型為變量,在SQLStatement屬性輸入 user::statemenet即可
6、從一個文件中執(zhí)行SQL句子
基本上同5差不多
但首先應該建立一個文件類型的來源
然后指定SQL來源類型為文件,然后指定文件來源就行了
總結
好了,就寫到此了,希望你能夠喜歡
該文的英文來源于 http://www.sqlis.com/default.aspx?58