使用 sql:overflow-field 擷取未處理的數據 (SQLXML 4.0)

適用於:SQL ServerAzure SQL 資料庫

使用 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 查詢
  1. 複製上述架構程序代碼,並將它貼到文本檔中。 將檔案儲存為Overflow.xml。

  2. 複製下列範本,並將它貼到文字檔中。 將檔案儲存為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"  
    
  3. 建立並使用 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>