在查詢中使用註解式 XSD 結構描述 (SQLXML 4.0)
適用於:SQL Server
Azure 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 是要從中擷取值的資料行。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應