在迴圈封裝範例中執行 SQL 陳述式
「迴圈」範例封裝中的「執行 SQL 陳述式」使用「Foreach 迴圈」容器來逐一查看儲存於資料夾之文字檔中的 SQL 陳述式。Transact-SQL 陳述式會在 AdventureWorks 資料庫中建立五個資料表,其中一個資料表用於儲存美國的每個有效銷售領域。「Foreach 檔案」列舉值的集合值會對應至變數。此變數用於屬性運算式,以每個列舉值更新「檔案」連接管理員中連接字串的值。
文字檔中的資料存在幾個問題:某些郵遞區號被不正確地解譯為數值,因而遺漏了前置零,且有些銷售領域的識別碼無效。封裝中資料流程會偵測並更正不正確的郵遞區號,將具有無效銷售領域的資料列寫入檔案,並將有效資料列導向至 AdventureWorks 資料庫中五個資料表的其中一個。
當重新執行封裝時,資料表會在插入資料前截斷。
如果您在非英文版的 Windows 上執行此範例,可能必須取代 [Program Files] 資料夾的當地語系化名稱,才可開啟或執行此範例。
重要事項: |
---|
範例只供教育目的之用。它們不能用於實際執行環境,而且從來沒有在實際執行環境中測試過。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 執行封裝
開啟 [命令提示字元] 視窗。
使用**「變更目錄」**命令 (cd),將目錄變更為 C:\Program Files\Microsoft SQL Server\90\DTS\Binn,即 dtexec 的位置。
輸入以下命令:
dtexec /f "C:\Program Files\Microsoft SQL Server\90\Samples\Integration Services\Package Samples\ExecuteSQLStatementsInLoop Sample\ExecuteSQLStatementsInLoop\ExecuteSQLStatementsInLoop.dtsx"
按 ENTER 鍵。
如需有關如何使用 dtexec 公用程式執行封裝的詳細資訊,請參閱《SQL Server 2005 線上叢書》中的<dtexec 公用程式>主題。
若要在 Business Intelligence Development Studio 中執行封裝
開啟 [Business Intelligence Development Studio]。
在 [檔案] 功能表上,指向 [開啟],然後按一下 [專案/方案]。
尋找「ExecuteSQLStatementsInLoop 範例」資料夾,然後按兩下名為 ExecuteSQLStatementsInLoop.sln 的檔案。
在 [方案總管] 中,以滑鼠右鍵按一下 [SSIS 封裝] 資料夾中的 ExecuteSQLStatementsInLoop.dtsx,然後再按 [執行封裝]。
重要事項: |
---|
如果您在第一次執行封裝前於「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 資料表的資料。