共用方式為


在查詢中使用批注式 XSD 架構 (SQLXML 4.0)

適用於:SQL ServerAzure SQL 資料庫

您可以針對批注架構指定查詢,以針對 XSD 架構在範本中指定 XPath 查詢,以從資料庫擷取數據。

<sql:xpath-query> 元素可讓您針對批注架構所定義的 XML 檢視指定 XPath 查詢。 要執行 XPath 查詢的批注架構,是使用 sql:xpath-query> 元素的 <mapping-schema 屬性來識別。

範本是包含一或多個查詢的有效 XML 檔。 FOR XML 和 XPath 查詢會傳回檔片段。 範本可作為檔片段的容器;因此,範本提供指定單一最上層專案的方式。

本主題中的範例會使用範本,針對批注架構指定 XPath 查詢,以從資料庫擷取數據。

例如,請考慮此批注架構:

<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:complexType>  
  </xsd:element>  
</xsd:schema>  

為了說明目的,這個 XSD 架構會儲存在名為 Schema2.xml 的檔案中。 然後,您可以針對下列範本檔案中指定的批注架構進行 XPath 查詢(Schema2T.xml):

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql"  
     >  
          Person.Contact[@ContactID="1"]  
</sql:xpath-query>  

然後,您可以建立並使用 SQLXML 4.0 測試腳本 (Sqlxml4test.vbs) 來執行查詢作為範本檔案的一部分。 如需詳細資訊,請參閱批注式 XDR 架構(在 SQLXML 4.0 中已被取代)。

使用內嵌對應架構

批注架構可以直接包含在範本中,然後針對內嵌架構在範本中指定 XPath 查詢。 範本也可以是 Updategram。

範本可以包含多個內嵌架構。 若要使用範本中包含的內嵌架構,請在 xsd:schema> 元素上<指定具有唯一值的 id 屬性,然後使用 #idvalue 來參考內嵌架構。 id 屬性的行為與 XDR 架構中使用的 sql:id ({urn:schemas-microsoft-com:xml-sql}id) 行為相同。

例如,下列範本會指定兩個內嵌批注架構:

<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>  
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'  
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'  
        id='InLineSchema1' sql:is-mapping-schema='1'>  
  <xsd:element name='Employees' ms:relation='HumanResources.Employee'>  
    <xsd:complexType>  
      <xsd:attribute name='LoginID'   
                     type='xsd:string'/>  
      <xsd:attribute name='Title'   
                     type='xsd:string'/>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
  
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'  
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'  
        id='InLineSchema2' sql:is-mapping-schema='1'>  
  <xsd:element name='Contacts' ms:relation='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:complexType>  
  </xsd:element>  
</xsd:schema>  
  
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'   
        mapping-schema='#InLineSchema1'>  
    /Employees[@LoginID='adventure-works\guy1']  
</sql:xpath-query>  
  
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'   
        mapping-schema='#InLineSchema2'>  
    /Contacts[@ContactID='1']  
</sql:xpath-query>  
</ROOT>  

此範本也會指定兩個 XPath 查詢。 <每個 xpath-query> 元素都會藉由指定 mapping-schema 屬性來唯一識別對應架構

當您在範本中指定內嵌架構時,也必須在 <xsd:schema 元素上指定 sql:is-mapping-schema> 批注。 sql:is-mapping-schema 接受布爾值 (0=false, 1=true)。 具有 sql:is-mapping-schema=“1” 的內嵌架構會被視為內嵌批注架構,而且不會在 XML 檔中傳回。

sql:is-mapping-schema 註釋屬於範本命名空間 urn:schemas-microsoft-com:xml-sql

若要測試此範例,請將範本 (InlineSchemaTemplate.xml) 儲存在本機目錄中,然後建立並使用 SQLXML 4.0 測試腳本 (Sqlxml4test.vbs) 來執行範本。 如需詳細資訊,請參閱使用 ADO 執行 SQLXML 4.0 查詢

除了在範本中的 sql:xpath-query 元素上指定 mapping-schema 屬性(如果有 XPath 查詢時),或在 updategram 中的 updg:sync> 元素上<,您可以執行下列動作:><

  • 在範本中<指定 ROOT> 元素 (全域宣告) 上的對應架構屬性。 接著,此對應架構會成為所有沒有明確 對應架構批注之 XPath 和 updategram 節點所使用的預設架構

  • 使用 ADO Command 物件指定對應架構屬性。

在 xpath-query> 或< updg:sync> 元素上<指定的對應架構屬性具有最高的優先順序;ADO Command 物件具有最低優先順序。

請注意,如果您在範本中指定 XPath 查詢,但未指定執行 XPath 查詢的對應架構,XPath 查詢會 被視為 dbobject 類型查詢。 例如,請考慮此範本:

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql">  
          Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto  
</sql:xpath-query>  

範本會指定 XPath 查詢,但未指定對應架構。 因此,此查詢會 被視為 dbobject 類型查詢,其中 Production.ProductPhoto 是數據表名稱,而 @ProductPhotoID='100' 是尋找標識符值為 100 的產品相片的述詞。 @LargePhoto 是要從中擷取值的數據行。