XML 視圖透過對 XML Schema(XSD)添加註釋,將關聯式資料庫的資料子集映射為虛擬 XML 文件。這使得可以使用 XPath 查詢直接獲取 XML 格式結果。
善用這三種屬性可避免 XML 輸出中重複的巢狀資料,大幅減小結果體積。
ID 值必須符合 XML NCName 規範:以字母或底線開頭,後接字母、數字、連字號、底線或點。資料庫主鍵常為純數字,不符合規範;且不同表主鍵值可能重複(如 OrderID=1, ProductID=1)。
解決方法:在映射 Schema 中使用 sql:prefix 註釋,為 ID/IDREF/IDREFS 指定前綴字串(如 ORD-, PROD-),確保唯一性與合規性。
<xsd:schema xmlns:xsd="https://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="root" sql:is-constant="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" maxOccurs="unbounded" sql:relation="Orders">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ShipAddress" sql:field="ShipAddress"/>
<xsd:element name="ShipCountry" sql:field="ShipCountry"/>
<xsd:element name="LineItem" maxOccurs="unbounded" sql:relation="[Order Details]" sql:relationship="Order_OrderDetails">
<xsd:complexType>
<xsd:attribute name="ProductID" type="xsd:IDREF" sql:field="ProductID" sql:prefix="PROD-"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:ID" sql:field="OrderID" sql:prefix="ORD-"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Product" maxOccurs="unbounded" sql:relation="Products">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductName" sql:field="ProductName"/>
</xsd:sequence>
<xsd:attribute name="ProductID" type="xsd:ID" sql:field="ProductID" sql:prefix="PROD-"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Jan2003),啟用 XPath 查詢。Orders.xsd 放入虛擬目錄。https://localhost/Jan2003/Orders/Orders.xsd/root 即可獲得含 ID/IDREF 的 XML 結果。掌握此技術,能讓 SQL Server 輸出更精簡、符合標準的 XML 文件。