Execute Sql Task元件是一個非常有用的Control Flow Task,可以直接執行SQL語句,例如,可以執行資料更新指令(update,delete,insert),也可以執行select查詢語句,傳回結果集,結果集可以是一行,也可以是多行。
一,General 頁籤
1,傳回結果集(Result Set)
None:表示不傳回結果,在執行Update,delete或insert指令時,使用該選項;
Single row:傳回單行結果,可以在Result Set 頁籤中,将結果集傳回到1個或多個變量中
Full result set:傳回多行結果,結果集存儲在object對象中

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的變量中,如果Execute SQL Task執行的SQL指令是動态變化的,使用Variable選項較好;
SQLStatement:要執行的SQL語句,根據SQLSourceType的不同,有三種不同的值:SQL語句,.sql檔案路徑,或SSIS變量;
3,示例:SQLSourceType=Variable
二,Expressions頁籤
SSIS Package的屬性,既可以在General Tab中手動配置,也可以在Expressions Tab中配置,将配置屬性的值儲存到變量中,可以動态控制包的執行,
示例,将SqlStatementSource的值存儲在變量中,結果和SqlSourceType=Variable是一樣的,隻不過實作方式不同,并且SSIS在執行過程中,使用Expressions的屬性覆寫General中配置的屬性值。
三,Result Set頁籤
如果在General頁籤中,将Result Set設定為Singel Row,可以将結果值存儲在變量中
四,Parameter Mapping 頁籤
如果sql指令在執行的過程中需要傳遞參數,可以在Parameter Mapping 頁籤中進行配置。如果使用的OLE DB 連結,需要使用 ?代表第一個參數,并且在Parameter Mapping 中将parameter name設定為參數的序号,第一個? 的序号是0,即序号從0依次遞增
五,傳回受影響資料的行數
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語句如下:
Task:insert Data執行的SQL語句是,傳入的參數是User::varCount
2,檢視結果,第一個Task傳回的結果是varCount是2,這個結果實際上是@@RowCount,SSIS在執行語句之後,将@@RowCount指派到Execute SQL Task 屬性ExecValueVariable指定的變量中。
本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。
本文轉自悅光陰部落格園部落格,原文連結:http://www.cnblogs.com/ljhdo/p/4421758.html,如需轉載請自行聯系原作者