在執行 SQL 工作中使用結果集
在 Integration Services 封裝中,結果集是否會傳回到執行 SQL 工作,端視工作所使用的 SQL 命令類型而定。例如,SELECT 陳述式通常會傳回結果集,INSERT 陳述式則不會。
結果集所包含的內容也會隨著 SQL 命令而有所不同。例如,來自 SELECT 陳述式的結果集可包含零個資料列、一個資料列或多個資料列。但是,SELECT 陳述式中傳回計數或總和的結果集只包含單一資料列。
在執行 SQL 工作中使用結果集比只是知道 SQL 命令是否傳回結果集,以及結果集所包含的內容還要複雜。若要在執行 SQL 工作中成功使用結果集,需要有其他使用需求與指導方針。本主題的其餘部分包含這些使用需求和指導方針:
指定結果集類型
以結果集填入變數
在執行 SQL 工作編輯器中設定結果集
指定結果集類型
執行 SQL 工作支援下列類型的結果集︰
無:結果集是在查詢未傳回任何結果時使用。例如,此結果集用於加入、變更和刪除資料表中記錄的查詢。
單一資料列:結果集是在查詢只傳回一個資料列時使用。例如,此結果集用於傳回計數或總和的 SELECT 陳述式。
完整結果集:結果集是在查詢傳回多個資料列時使用。例如,此結果集用於擷取資料表中所有資料列的 SELECT 陳述式。
XML:結果集是在查詢傳回 XML 格式的結果集時使用。例如,此結果集用於包含 FOR XML 子句的 SELECT 陳述式。
如果執行 SQL 工作使用 [完整結果集] 結果集,且查詢傳回多個資料列集,則工作只會傳回第一個資料列集。如果此資料列集產生錯誤,則工作會報告該錯誤。如果其他資料列集產生錯誤,則工作不會報告它們。
根據連接管理員的類型而定,SQL 陳述式所傳回的值如果還不是字串,則可能會隱含或明確地轉換成字串。ADO 或 ODBC 連接管理員會隱含地將傳回值轉換成字串。OLE DB 連接管理員會明確地將 DBTYPE_I8、DBTYPE_UI8、DBTYPE_NUMERIC、DBTYPE_GUID 和 DBTYPE_BYTES 資料類型的傳回值轉換成字串。但是,ADO.NET 連接管理員不會將傳回值轉換成字串。
以結果集填入變數
如果查詢傳回的結果集類型為單一資料列、資料列集或 XML,則您可將結果集繫結至使用者自訂的變數。
如果結果集類型為 Single row,則可以藉由使用資料行名稱做為結果集名稱將傳回結果中的資料行繫結至變數,或者可以使用資料行清單中資料行的序數位置做為結果集名稱。例如,查詢 SELECT Color FROM Production.Product WHERE ProductID = ? 的結果集名稱可以為 Color 或 0。如果查詢傳回多個資料行,並且您要存取所有資料行中的值,則您必須將每個資料行繫結至不同的變數。如果您透過使用數字做為結果集名稱將資料行對應至變數,則該數字會反映資料行在查詢的資料行清單中所顯示的順序。例如,在查詢 SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ? 中,您將 0 用於 Color 資料行,將 1 用於 ListPrice 資料行。使用資料行名稱做為結果集名稱的功能取決於將該工作設定為使用的提供者。並非所有的提供者可以使用資料行名稱做為結果集名稱。
部分傳回單一值的查詢可能不包含資料行名稱。例如,SELECT COUNT (*) FROM Production.Product 陳述式不會傳回任何資料行名稱。您可以使用序數位置 0 做為結果名稱來存取傳回的結果。若要依據資料行名稱存取傳回的結果,查詢必須包含用來提供資料行名稱的 AS <別名名稱> 子句。SELECT COUNT (*)AS CountOfProduct FROM Production.Product 陳述式會提供 CountOfProduct 資料行。接著您可以使用 CountOfProduct 資料行名稱或序數位置 0 來存取傳回結果資料行。
如果結果集類型為完整結果集或 XML,則必須使用 0 做為結果集名稱。
當您將變數對應至結果集類型為 Single row 的結果集時,此變數須具有與結果集包含的資料行之資料類型相容的資料類型。例如,包含資料類型為 String 之資料行的結果集不能對應至數值資料類型的變數。XML 結果集只可對應至資料類型為 String 或 Object 的變數。如果變數有 String 資料類型,則執行 SQL 工作會傳回字串,且 XML 來源可使用 XML 資料。如果變數有 Object 資料類型,則執行 SQL 工作會傳回「文件物件模組 (DOM)」物件。[完整結果集] 必須對應至資料類型為 Object 的變數。傳回結果為資料列集物件。您可以撰寫導覽資料列集物件,以及存取資料行相關資訊和資料列集中相關資料的自訂工作。
下表列出可對應至結果集之變數的資料類型。
結果集類型 |
變數的資料類型 |
物件類型 |
---|---|---|
單一資料列 |
與結果集之類型資料行相容的任何類型。 |
不適用 |
完整結果集 |
Object |
如果工作使用原生連接管理員 (包括 ADO、OLE DB、Excel 與 ODBC 連接管理員),則傳回的物件是 ADO Recordset。 如果工作使用 Managed 連接管理員 (例如 ADO.NET 連接管理員),那麼傳回的物件是 System.Data.DataSet。 |
XML |
String |
String |
XML |
Object |
如果工作使用原生連接管理員 (包括 ADO、OLE DB、Excel 與 ODBC 連接管理員),則傳回的物件是 MSXML6.IXMLDOMDocument。 如果工作使用 Managed 連接管理員 (例如 ADO.NET 連接管理員),那麼傳回的物件是 System.Xml.XmlDocument。 |
變數可在執行 SQL 工作或封裝範圍內定義。如果變數包含封裝範圍,則結果集可用於該封裝內的其他工作和容器,並可用於「執行封裝」或「執行 DTS 2000 封裝」工作所執行的任何封裝。
將變數對應到單一資料列結果集時,SQL 陳述式所傳回的值如果還不是字串,則可能會轉換為字串。是否發生此轉換,或者此為隱含還是明確的轉換,取決於所使用的連接管理員類型:
使用 ADO.NET 連接管理員時,不會發生轉換。
使用 ADO 或 ODBC 連接管理員時,會隱含地發生此轉換。
使用 OLE DB 或 Excel 連接管理員時,連接管理員則會明確地將下列類型 (DBTYPE_NUMERIC、DBTYPE_GUID 和 DBTYPE_BYTES) 的值轉換為字串。
如需有關將結果集載入變數中的詳細資訊,請參閱<如何:在執行 SQL 工作中將結果集對應至變數>。
在執行 SQL 工作中設定結果集
如需有關可以在 SSIS 設計師中設定之結果集屬性的詳細資訊,請按下列主題:
如需有關如何在 SSIS 設計師中設定這些屬性的詳細資訊,請按一下下列主題:
外部資源
- 位於 msftisprodsamples.codeplex.com 的 CodePlex 範例:執行 SQL 參數和結果集 (英文)
|