共用方式為


在查詢中使用註解式 XSD 結構描述 (SQLXML 4.0)

適用於:SQL ServerAzure SQL Database

您可以針對 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 儲存。 接著,您可以針對註解式結構描述,在下列範本檔 (Schema2T.xml) 中指定 XPath 查詢:

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

然後,您可以建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs),將查詢當做範本檔的一部分執行。 如需詳細資訊,請參閱 SQLXML 4.0) 中已淘汰的批註 XDR 架構 (

使用內嵌的對應結構描述

註解式結構描述可以直接包含在範本中,接著就可以針對內嵌的結構描述指定範本中的 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 > 元素上 <指定對應架構屬性, (在 updategram 中有 XPath 查詢) ,或在updg:sync > 元素上 <,您可以執行下列動作:

  • 在範本中的< 全域宣告) (,在 ROOT >元素上指定mapping-schema屬性。 此對應架構接著會變成所有沒有明確 對應架構 批註之 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 是要從中擷取值的資料行。