共用方式為


執行 SQL 任務中的結果集

在 Integration Services 套件中,結果集是否會傳回至「執行 SQL」工作,取決於工作所使用的 SQL 命令類型。 例如,SELECT 語句通常會傳回結果集,但 INSERT 語句則不會傳回。

結果集包含的內容也會隨 SQL 命令而有所不同。 例如,SELECT 語句的結果集可以包含零個數據列、一列或多個數據列。 不過,從SELECT語句傳回計數或總和的結果集只包含單一數據列。

在執行 SQL 工作中使用結果集不僅僅是了解 SQL 命令是否返回結果集及其內容。 在執行 SQL 工作中成功使用結果集時,還有其他使用需求和指導方針。 本主題的其餘部分包含這些使用需求和指導方針:

指定結果集類型

「執行 SQL」工作支援下列類型的結果集:

  • 當查詢未傳回任何結果時,會使用 None 結果集。 例如,此結果集用於在資料表中新增、變更和刪除記錄的查詢。

  • 當查詢只傳回一個數據列時,就會使用單一數據 結果集。 例如,此結果集用於傳回計數或總和的SELECT語句。

  • 當查詢傳回多個數據列時,會使用 完整結果集結果集 。 例如,此結果集用於擷取數據表中所有數據列的SELECT語句。

  • 當查詢以 XML 格式傳回結果集時,會使用 XML 結果集。 例如,此結果集用於包含 FOR XML 子句的 SELECT 語句。

如果執行 SQL 工作使用 完整結果集結果集 ,而查詢會傳回多個數據列集,則工作只會傳回第一個數據列集。 如果此數據列集產生錯誤,工作會報告錯誤。 如果其他數據列集產生錯誤,工作就不會回報錯誤。

使用結果集填充變數

您可以將查詢返回的結果集綁定到使用者定義的變數上,如果結果集的類型是單一列、數據列集或 XML。

如果結果集類型為 Single 資料列,您可以使用資料行名稱做為結果集名稱,將傳回結果中的數據行系結至變數,或者您可以使用數據行清單中的數據行序數位置做為結果集名稱。 例如,查詢 SELECT Color FROM Production.Product WHERE ProductID = ? 的結果集名稱可以是 Color0。 如果查詢傳回多個數據行,而且您想要存取所有數據行中的值,則必須將每個數據行系結至不同的變數。 如果您使用數位做為結果集名稱將數據行對應至變數,則數位會反映數據行出現在查詢數據行清單中的順序。 例如,在查詢 SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?中,您會針對 Color 數據行使用 0, 而 ListPrice 數據行則使用 1。 使用數據行名稱做為結果集名稱的能力取決於工作設定為使用的提供者。 並非所有提供者都提供數據行名稱。

某些傳回單一值的查詢可能不會包含數據行名稱。 例如,語句 SELECT COUNT (*) FROM Production.Product 不會傳回任何數據行名稱。 您可以使用序數位置 0 作為結果名稱來存取傳回結果。 若要依數據行名稱存取傳回結果,查詢必須包含 AS <別名名稱> 子句,以提供數據行名稱。 語句 SELECT COUNT (*)AS CountOfProduct FROM Production.Product提供 CountOfProduct 數據行。 然後,您可以使用 CountOfProduct 資料行名稱或序數位置 0 來存取傳回結果數據行。

如果結果集類型是 完整結果集XML,您必須使用 0 作為結果集名稱。

當您將變數對應至具有單一數據 結果集類型的結果集時,變數必須具有與結果集包含之數據行數據類型相容的數據類型。 例如,包含 String 數據類型數據行的結果集無法對應至具有數值數據類型的變數。 當您將 TypeConversionMode 屬性設定為 Allowed時,執行 SQL 工作會嘗試將輸出參數和查詢結果轉換成指派結果之變數的數據類型。

XML 結果集只能對應至具有 StringObject 這些數據類型的變數。 如果變數具有 String 數據類型,Execute SQL 工作會傳回字元串,而且 XML 來源可以取用 XML 數據。 如果變數具有 Object 數據類型,Execute SQL 工作會傳回 Document Object Model (DOM) 物件。

完整結果集必須對應至數據類型的Object變數。 傳回結果為數據列集物件。 您可以使用 Foreach 迴圈容器,將儲存在 Object 變數中的數據表數據列值擷取到封裝變數中,然後使用腳本工作將儲存在封裝變數中的數據寫入檔案。 如需如何使用 Foreach 迴圈容器和腳本工作的示範,請參閱 msftisprodsamples.codeplex.com 上的 CodePlex 範例 執行 SQL 參數和結果集

下表摘要說明可對應至結果集的變數數據類型。

結果集類型 變數的數據類型 物件類型
單一列 任何與結果集中的類型欄位相容的類型。 不適用
完整結果集 Object 如果工作使用原生連接管理員,包括 ADO、OLE DB、Excel 和 ODBC 連線管理員,則傳回的物件為 ADO Recordset

如果工作使用 Managed 連接管理員,例如 ADO.NET 連接管理員,則傳回的物件為 System.Data.DataSet

您可以使用腳本工作來存取 System.Data.DataSet 物件,如下列範例所示。

Dim dt As Data.DataTable
Dim ds As Data.DataSet = CType(Dts.Variables("Recordset").Value, DataSet)
dt = ds.Tables(0)
XML String String
XML Object 如果工作使用原生連接管理員,包括 ADO、OLE DB、Excel 和 ODBC 連線管理員,則傳回的物件為 MSXML6.IXMLDOMDocument

如果工作使用 Managed 連接管理員,例如 ADO.NET 連接管理員,則傳回的物件為 System.Xml.XmlDocument

變數可以在執行 SQL 工作或封裝的範圍內定義。 如果變數具有封裝範圍,則結果集合可供封裝內的其他工作和容器使用,而且可供執行封裝任務或執行 DTS 2000 封裝任務的任何套件使用。

當您將變數對應至單一數據 結果集時,當符合下列條件時,SQL 語句傳回的非字串值會轉換成字串:

  • TypeConversionMode 屬性設定為 true。 您可以在 [屬性] 視窗中或使用 [執行 SQL 工作編輯器] 來設定屬性值。

  • 轉換不會產生數據截斷。

如需將結果集載入變數的相關信息,請參閱 將結果集對應至執行 SQL 工作中變數

在執行 SQL 工作中設定結果集

如需您可以在 SSIS 設計工具中設定之結果集屬性的詳細資訊,請按下列主題:

如需如何在 SSIS 設計工具中設定這些屬性的詳細資訊,請按下列主題:

在執行 SQL 任務中將結果集映射到變數