使用 sql:mapped 從 XML 文件排除結構描述項目
適用於:SQL ServerAzure SQL Database
XSD 結構描述中的每個元素和屬性都會因為預設對應,而對應到資料庫資料表/檢視表和資料行。 如果您想要在 XSD 架構中建立未對應至任何資料庫資料表 (檢視) 或資料行的專案,而且該資料表不會出現在 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 架構包含< 具有 ContactID、FirstName、LastName 和 HomeAddress 屬性的 Person.Contact >元素。
在將此 XSD 架構對應至 AdventureWorks 資料庫中的 Person.Contact 資料表時,會在 HomeAddress屬性上指定sql:mapped,因為 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 查詢
複製上述的結構描述程式碼,並將其貼到文字檔中。 將檔案儲存為 sql-mapped.xml。
複製下列範本,並將其貼到文字檔中。 將檔案儲存為 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"
建立和使用 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 的對應架構。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應