共用方式為


執行 SQL 工作

「執行 SQL」工作會執行封裝中的 SQL 陳述式或預存程序。工作可以包含逐次執行的單一 SQL 陳述式或多重 SQL 陳述式。您可將執行 SQL 工作用於下列用途:

  • 截斷資料表或檢視,為插入資料做準備。

  • 建立、改變和卸除資料庫物件,例如資料表和檢視。

  • 將資料載入至事實 (Fact) 和維度 (Dimension) 資料表之前,先重建這些資料表。

  • 執行預存程序。

  • 將從查詢傳回的資料列集儲存到變數中。

您可以利用下列方式設定執行 SQL 工作:

  • 指定用來連接到資料庫的連接管理員類型。

  • 指定 SQL 陳述式傳回的結果集類型。

  • 指定 SQL 陳述式的逾時。

  • 指定 SQL 陳述式的來源。

  • 指示工作是否要略過 SQL 陳述式的準備階段。

  • 如果使用 ADO 連接類型,您必須指出 SQL 陳述式是否為預存程序。如果是其他連接類型,此屬性為唯讀,且其值固定為 false。

執行 SQL 工作可搭配「Foreach 迴圈」容器和「For 迴圈」容器,用來執行多個 SQL 陳述式。這些容器會實作封裝中重複的控制流程,並且可以重複執行「執行 SQL」工作。例如,若使用「Foreach 迴圈」容器,封裝即可列舉資料夾中的檔案,並重複執行「執行 SQL」工作,以便執行每個檔案中儲存的 SQL 陳述式。

連接到資料來源

執行 SQL 工作可使用不同類型的連接管理員,以連接到其執行 SQL 陳述式或預存程序的資料來源。此工作可使用下表中列出的連接類型。

建立 SQL 陳述式

此工作所使用的 SQL 陳述式來源,可以是包含陳述式的工作屬性、包含一或多個陳述式的檔案連接,或者包含陳述式的變數名稱。SQL 陳述式必須以來源資料庫管理系統 (DBMS) 的用語撰寫。如需詳細資訊,請參閱<在封裝中使用查詢>。

如果 SQL 陳述式儲存在檔案中,則工作會使用「檔案」連接管理員連接到該檔案。如需詳細資訊,請參閱<檔案連接管理員>。

在 SSIS 設計師中,您可以使用 [執行 SQL 工作編輯器] 對話方塊輸入 SQL 陳述式,或使用圖形化使用者介面 [查詢產生器] 建立 SQL 查詢。如需詳細資訊,請參閱<執行 SQL 工作編輯器 (一般頁面)>和<查詢產生器>。

[!附註]

執行 SQL 工作可能無法成功剖析在執行 SQL 工作外部撰寫的有效 SQL 陳述式。

在批次中傳送多重陳述式

如果您在執行 SQL 工作中加入多個陳述式,可將它們組成群組,並在批次中執行。若要表示批次結束,請使用 GO 命令。兩個 GO 命令之間的所有 SQL 陳述式,都會在一個批次中傳送至要執行的 OLE DB 提供者。SQL 命令可包含以 GO 命令分隔的多個批次。

您可分組到同一個批次中的 SQL 陳述式有其限制。如需詳細資訊,請參閱<陳述式的批次>。

如果執行 SQL 工作執行一個批次的 SQL 陳述式,則下列規則會套用至該批次︰

  • 只有一個陳述式可傳回結果集,且它必須是批次中的第一個陳述式。

  • 如果結果集使用結果繫結,則查詢必須傳回相同數目的資料行。如果查詢傳回不同數目的資料行,工作便會失敗。不過,即使工作失敗,它執行的查詢 (例如,DELETE 或 INSERT 查詢) 仍會成功。

  • 如果結果繫結使用資料行名稱,則查詢必須傳回名稱與工作所使用之結果集名稱相同的資料行。如果資料行遺失,工作便會失敗。

  • 如果工作使用參數繫結,則批次中所有查詢的參數數目和類型都必須相同。

執行參數化的 SQL 命令

SQL 陳述式和預存程序經常使用輸入參數、輸出參數以及傳回碼。執行 SQL 工作支援 Input、Output 和 ReturnValue 等參數類型。您可以使用 Input 類型當做輸入參數,使用 Output 當做輸出參數,並使用 ReturnValue 當做傳回碼。

[!附註]

只有在資料提供者支援參數時,您才能在執行 SQL 工作中使用參數。

如需在執行 SQL 工作中使用參數和傳回碼的詳細資訊,請參閱<在執行 SQL 工作中使用參數和傳回碼>。

指定結果集類型

根據 SQL 命令的類型而定,結果集可能會,也可能不會傳回到執行 SQL 工作。例如,SELECT 陳述式通常會傳回結果集,INSERT 陳述式則不會。來自 SELECT 陳述式的結果集可包含零個資料列、一個資料列或多個資料列。預存程序亦可傳回整數值,稱為傳回碼,以表示程序的執行狀態。在此情況下,結果集是由單一資料列所組成。

如需在執行 SQL 工作中從 SQL 命令擷取結果集的詳細資訊,請參閱<在執行 SQL 工作中使用結果集>。

執行 SQL 工作上可用的自訂記錄項目

下表描述「執行 SQL」工作的自訂記錄項目。如需詳細資訊,請參閱<在封裝中實作記錄>和<自訂訊息以進行記錄>。

記錄項目

描述

ExecuteSQLExecutingQuery

提供 SQL 陳述式執行階段的相關資訊。寫入記錄項目的時機包括在工作取得資料庫連接時、在工作開始準備 SQL 陳述式時,以及在 SQL 陳述式執行完成之後。準備階段的記錄項目包含工作所使用的 SQL 陳述式。

疑難排解執行 SQL 工作

您可以記錄執行 SQL 工作對外部資料提供者執行的呼叫。您可以使用這項記錄功能,疑難排解執行 SQL 工作所執行的 SQL 命令。若要記錄執行 SQL 工作對外部資料提供者執行的呼叫,請啟用封裝記錄,然後在封裝層級選取 [診斷] 事件。如需詳細資訊,請參閱<疑難排解封裝執行>。

有時 SQL 命令或預存程序會傳回多個結果集。這些結果集不只包括屬於 SELECT 查詢結果的資料列集,也包括屬於 RAISERROR 或 PRINT 陳述式之錯誤結果的單一值。工作是否忽略發生在第一個結果集之後之結果集中的錯誤,將取決於所使用的連接管理員類型:

  • 使用 OLE DB 和 ADO 連接管理員時,工作會忽略發生在第一個結果集之後的結果集。因此,使用這些連接管理員時,如果錯誤不屬於第一個結果集的一部分,會忽略 SQL 命令或預存程序所傳回的錯誤。

  • 使用 ODBC 和 ADO.NET 連接管理員時,工作不會忽略發生在第一個結果集之後的結果集。使用這些連接管理員時,如果第一個結果集之外的結果集包含錯誤,工作將會失敗。

設定執行 SQL 工作

您可以程式設計方式或透過「SSIS 設計師」設定屬性。

如需有關可以在「SSIS 設計師」中設定之屬性的詳細資訊,請按下列其中一個主題:

如需有關如何在「SSIS 設計師」中設定這些屬性的詳細資訊,請按下列主題:

以程式設計的方式設定執行 SQL 工作

如需有關以程式設計方式設定這些屬性的詳細資訊,請按一下以下主題:

Integration Services 圖示 (小) 掌握 Integration Services 的最新狀態

若要取得 Microsoft 的最新下載、文件、範例和影片以及社群中的選定解決方案,請瀏覽 MSDN 或 TechNet 上的 Integration Services 頁面:

若要得到這些更新的自動通知,請訂閱該頁面上所提供的 RSS 摘要。