使用 sql:overflow-field 擷取未處理的數據 (SQLXML 4.0)
使用 Transact-SQL OPENXML 函數在資料庫中插入記錄時,源 XML 檔的所有未處理數據都可以儲存在數據行中。 當您使用批註架構從資料庫擷取數據時,您可以指定 sql:overflow-field 屬性來識別儲存溢位數據之數據表中的數據行。 您可以在 元素>上<指定 sql:overflow-field 屬性。
接著會以下列方式擷取此數據:
儲存在溢位數據行中的屬性會新增至包含 sql:overflow-field 批注的專案。
子專案及其子系,儲存在資料庫中溢位數據行中,會新增為子專案,並遵循架構中明確指定的內容。 (沒有保留任何順序。
範例
若要使用下列範例建立工作範例,您必須符合特定需求。 如需詳細資訊,請參閱 執行 SQLXML 範例的需求。
A. 指定專案的 sql:overflow-field
此範例假設已執行下列腳本,讓名為 Customers2 的數據表存在於 tempdb 資料庫中:
USE tempdb
CREATE TABLE Customers2 (
CustomerID VARCHAR(10),
ContactName VARCHAR(30),
AddressOverflow NVARCHAR(500))
GO
INSERT INTO Customers2 VALUES (
'ALFKI',
'Joe',
'<Address>
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Address>')
GO
此外,您必須為 tempdb 資料庫建立虛擬目錄,以及名為 「template」 之 範本類型的範本 虛擬名稱。
在下列範例中,對應架構會擷取儲存在 Customers2 資料表之 AddressOverflow 數據行中的未處理數據:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customers2" sql:overflow-field="AddressOverflow" >
<xsd:complexType>
<xsd:attribute name="CustomerID" type="xsd:integer"/>
<xsd:attribute name="ContactName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
若要針對架構測試範例 XPath 查詢
複製上述架構程序代碼,並將它貼到文本檔中。 將檔案儲存為Overflow.xml。
複製下列範本,並將它貼到文字檔中。 將檔案儲存為OverflowT.xml儲存在儲存Overflow.xml的相同目錄中。 範本中的查詢會選取 Customers2 資料表中的記錄。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="Overflow.xml"> /Customers2 </sql:xpath-query> </ROOT>
針對對應架構指定的目錄路徑 (Overflow.xml) 相對於儲存範本的目錄。 您也可以指定絕對路徑,例如:
mapping-schema="C:\SqlXmlTest\Overflow.xml"
建立並使用 SQLXML 4.0 測試腳本 (Sqlxml4test.vbs) 來執行範本。
如需詳細資訊,請參閱使用 ADO 執行 SQLXML 4.0 查詢。
以下為結果集:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customers2 CustomerID="ALFKI" ContactName="Joe">
<Address1>Maple St.</Address1>
<Address2>Apt. E105</Address2>
<City>Seattle</City>
<State>WA</State>
<Zip>98147</Zip>
</Customers2>
</ROOT>