共用方式為


在迴圈封裝範例中執行 SQL 陳述式

「迴圈」範例封裝中的「執行 SQL 陳述式」使用「Foreach 迴圈」容器來逐一查看儲存於資料夾之文字檔中的 SQL 陳述式。Transact-SQL 陳述式會在 AdventureWorks 資料庫中建立五個資料表,其中一個資料表用於儲存美國的每個有效銷售領域。「Foreach 檔案」列舉值的集合值會對應至變數。此變數用於屬性運算式,以每個列舉值更新「檔案」連接管理員中連接字串的值。

文字檔中的資料存在幾個問題:某些郵遞區號被不正確地解譯為數值,因而遺漏了前置零,且有些銷售領域的識別碼無效。封裝中資料流程會偵測並更正不正確的郵遞區號,將具有無效銷售領域的資料列寫入檔案,並將有效資料列導向至 AdventureWorks 資料庫中五個資料表的其中一個。

當重新執行封裝時,資料表會在插入資料前截斷。

如果您在非英文版的 Windows 上執行此範例,可能必須取代 [Program Files] 資料夾的當地語系化名稱,才可開啟或執行此範例。

ms160815.note(zh-tw,SQL.90).gif重要事項:
範例只供教育目的之用。它們不能用於實際執行環境,而且從來沒有在實際執行環境中測試過。Microsoft 不提供對這些範例的技術支援。

需求

在執行此範例封裝之前,請確定已符合下列條件:

  • 範例封裝及其使用的資料檔必須安裝在本機硬碟上。
  • 必須已安裝 AdventureWorks 資料庫並且對此資料庫具有系統管理權限。
  • 如果只想從命令列執行範例封裝,則必須安裝 SQL Server 2005 Integration Services (SSIS)。
  • 若要在「SSIS 設計師」中開啟封裝並執行範例封裝,則必須安裝 Business Intelligence Development Studio。

如需有關如何安裝範例的詳細資訊,請參閱《SQL Server 2005 線上叢書》中的<安裝範例 Integration Services 封裝>主題。若要取得最新版的範例,包括自 SQL Server 2005 原始發行版本以來所發佈的新範例,請參閱<SQL Server 2005 範例與範例資料庫 (2006 年 4 月)>(英文)。

範例封裝的位置

如果範例已安裝於預設安裝位置,則「執行 SQL 陳述式範例」封裝位於下列資料夾中:

c:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\

執行此範例封裝需要下列檔案。

檔案 描述

ExecuteSQLStatementsInLoop.dtsx

封裝檔案。

Customer.txt

來源資料檔案。

CustomersWithInvalidTerritoryID.txt

寫入無效資料的檔案。

CreateProspectTableTerr1.sql

建立 Territory1 資料表的 Transact-SQL 陳述式。

CreateProspectTableTerr2.sql

建立 Territory2 資料表的 Transact-SQL 陳述式。

CreateProspectTableTerr3.sql

建立 Territory3 資料表的 Transact-SQL 陳述式。

CreateProspectTableTerr4.sql

建立 Territory4 資料表的 Transact-SQL 陳述式。

CreateProspectTableTerr5.sql

建立 Territory5 資料表的 Transact-SQL 陳述式。

執行範例

從命令列使用 dtexec 公用程式可以執行封裝,或者也可以在 Business Intelligence Development Studio 中執行封裝。

如果您使用非英文版的 Windows,可能需要更新封裝中所使用之任何檔案連接管理員的 ConnectionString 屬性,才可順利執行範例封裝。您應該確認連接管理員中使用的路徑在電腦上有效,如果需要的話,也可以修改該路徑以使用 [Program Files] 資料夾的當地語系化名稱。

對於此範例,您可能必須更新 CreateTableSQL、Customers 及 CustomersWithInvalidTerritoryID 連接管理員之 ConnectionString 屬性中的 "Program Files"。

若要使用 dtexec 執行封裝

  1. 開啟 [命令提示字元] 視窗。

  2. 使用**「變更目錄」**命令 (cd),將目錄變更為 C:\Program Files\Microsoft SQL Server\90\DTS\Binn,即 dtexec 的位置。

  3. 輸入以下命令:

    dtexec /f "C:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\ExecuteSQLStatementsInLoop.dtsx"
    
  4. ENTER 鍵。

如需有關如何使用 dtexec 公用程式執行封裝的詳細資訊,請參閱《SQL Server 2005 線上叢書》中的<dtexec 公用程式>主題。

若要在 Business Intelligence Development Studio 中執行封裝

  1. 開啟 [Business Intelligence Development Studio]。

  2. [檔案] 功能表上,指向 [開啟],然後按一下 [專案/方案]

  3. 尋找「ExecuteSQLStatementsInLoop 範例」資料夾,然後按兩下名為 ExecuteSQLStatementsInLoop.sln 的檔案。

  4. [方案總管] 中,以滑鼠右鍵按一下 [SSIS 封裝] 資料夾中的 ExecuteSQLStatementsInLoop.dtsx,然後再按 [執行封裝]

ms160815.note(zh-tw,SQL.90).gif重要事項:
如果您在第一次執行封裝前於「SSIS 設計師」中開啟「迴圈」範例封裝中的「執行 SQL 陳述式」,「資料流程」工作會包含警告。發生警告是因為封裝使用的 SQL Server 資料表尚不存在;該資料表會在第一次執行封裝時建立。當您已至少執行一次封裝後,於 SSIS 設計師中重新開啟封裝時便不會出現警告。封裝會成功執行而不論是否出現警告。

範例中的元件

下表列出範例中使用的 Integration Services 工作、容器、來源、轉換、目的地和連接管理員。

元素 用途

Foreach 迴圈

「Foreach 迴圈」容器 (執行 SQL 陳述式) 會使用「Foreach 檔案」列舉值來逐一查看包含 Transact-SQL 陳述式的檔案。「Foreach 迴圈」容器包含「執行 SQL」工作。

執行 SQL 工作

「執行 SQL」工作 (Create Tables) 會連接到 AdventureWorks 資料庫並執行會建立資料表的五個 Transact-SQL 陳述式。

資料流程工作

「資料流程」工作 (Extract-Clean-Load Data) 會執行從文字檔擷取資料的資料流程,清除並散發資料,然後將資料載入 AdventureWorks 資料庫中的資料表。

一般檔案來源

一般檔案來源 (Extract data) 會從文字檔擷取資料。

條件式分割轉換

「條件式分割」轉換 (Direct Rows by TerritoryID) 會根據 TerritoryID 資料行中的值將資料列導向至不同的輸出。TerritoryID 中具有無效值的資料列會導向至預設輸出。

「衍生的資料行」轉換

「衍生的資料行」轉換 (Fix Postal Code) 會透過將前置零加入至四個字元的郵遞區號來清除郵遞區號。

OLE DB 目的地

五個 OLE DB 目的地會將資料載入五個不同的領域資料表。

檔案連接管理員

檔案連接管理員 (Create Tables SQL) 會連接到包含 SQL CREATE TABLE 陳述式的檔案。

一般檔案連接管理員

「檔案」連接管理員 (Customers) 會連接到包含客戶來源資料的文字檔。

「檔案」連接管理員 (CustomsWithInvalidTerritoryId) 會連接到封裝寫入無效資料的文字檔。

OLE DB 連接管理員

OLE DB 連接管理員 (local).AdventureWorks 會連接到本機伺服器上的 AdventureWorks 資料庫。

範例結果

若要查看「迴圈」範例封裝中「執行 SQL 陳述式」的執行結果,請開啟 SQL Server Management Studio 中的 [查詢] 視窗,輸入或複製下列 Transact-SQL 查詢,然後執行此查詢。

SELECT * FROM AdventureWorks.dbo.Territory1
SELECT * FROM AdventureWorks.dbo.Territory2
SELECT * FROM AdventureWorks.dbo.Territory3
SELECT * FROM AdventureWorks.dbo.Territory4
SELECT * FROM AdventureWorks.dbo.Territory5

此查詢會擷取從文字檔擷取並載入 SQL Server 資料表的資料。