使用 sql:mapped 從 XML 文件排除結構描述項目

適用於:SQL ServerAzure SQL 資料庫

XSD 架構中的每個元素和屬性都會對應至資料庫數據表/檢視和數據行,因為預設對應。 如果您想要在 XSD 架構中建立不會對應至任何資料庫資料表 (view) 或數據行且未出現在 XML 中的專案,您可以指定 sql:mapped 批注。

如果架構無法修改,或架構用來驗證來自其他來源的 XML,但包含未儲存在資料庫中的數據,sql:mapped 批注特別有用。 sql:mapped 註釋與 sql:is-constant 不同,因為未對應的項目和屬性不會出現在 XML 檔中。

sql:mapped 註釋接受布爾值 (0 = false,1 = true)。 可接受的值為 0、1、true 和 false。

範例

若要使用下列範例建立工作範例,您必須符合特定需求。 如需詳細資訊,請參閱 執行 SQLXML 範例的需求。

A. 指定 sql:mapped 註釋

假設您有來自其他來源的 XSD 架構。 這個 XSD 架構包含 <Person.Contact> 元素,其中包含 ContactIDFirstName、LastNameHomeAddress 屬性。

在將此 XSD 架構對應至 AdventureWorks 資料庫中的 Person.Contact 數據表時,sql:mapped 是在 HomeAddress 屬性上指定,因為 Employees 數據表不會儲存員工的住家位址。 因此,當針對對應架構指定 XPath 查詢時,這個屬性不會對應至資料庫,而且不會在產生的 XML 檔中傳回。

默認對應會針對架構的其餘部分進行。 <Person.Contact 元素會對應至 Person.Contact> 數據表,而所有屬性都會對應至 Person.Contact 數據表中具有相同名稱的數據行。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Person.Contact">  
    <xsd:complexType>  
      <xsd:attribute name="ContactID"   type="xsd:string"/>  
      <xsd:attribute name="FirstName"    type="xsd:string" />  
      <xsd:attribute name="LastName"     type="xsd:string" />  
      <xsd:attribute name="HomeAddress" type="xsd:string"   
                     sql:mapped="false" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
若要針對架構測試範例 XPath 查詢
  1. 複製上述架構程序代碼,並將它貼到文本檔中。 將檔案儲存為sql-mapped.xml。

  2. 複製下列範本,並將它貼到文字檔中。 將檔案儲存為sql-mappedT.xml儲存sql-mapped.xml的相同目錄中。

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="sql-mapped.xml">  
            /Person.Contact[@ContactID < 10]  
        </sql:xpath-query>  
    </ROOT>  
    

    針對對應架構所指定的目錄路徑 (MySchema.xml) 相對於儲存範本的目錄。 您也可以指定絕對路徑,例如:

    mapping-schema="C:\MyDir\sql-mapped.xml"  
    
  3. 建立並使用 SQLXML 4.0 測試腳本 (Sqlxml4test.vbs) 來執行範本。

    如需詳細資訊,請參閱 使用 ADO 執行 SQLXML 查詢

這是結果集:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel" />   
  <Person.Contact ContactID="3" FirstName="Kim" LastName="Abercrombie" />   
  <Person.Contact ContactID="4" FirstName="Humberto" LastName="Acevedo" />   
  <Person.Contact ContactID="5" FirstName="Pilar" LastName="Ackerman" />   
  <Person.Contact ContactID="6" FirstName="Frances" LastName="Adams" />   
  <Person.Contact ContactID="7" FirstName="Margaret" LastName="Smith" />   
  <Person.Contact ContactID="8" FirstName="Carla" LastName="Adams" />   
  <Person.Contact ContactID="9" FirstName="Jay" LastName="Adams" />   
</ROOT>  

請注意,ContactID、FirstName 和 LastName 存在,但 HomeAddress 不是因為為 sql:mapped 屬性指定了 0 的對應架構。

另請參閱

XSD 元素與屬性與資料表和資料列的預設對應 (SQLXML 4.0)