SQL Server 2000 透過 XDR (XML-Data Reduced) Schema 將關聯資料表映射為 XML 視圖,支援以 XPath 風格查詢直接產生 XML 結果。本文提供一個完整的 ASP + ADO 範例,示範如何設定 Command 物件屬性、指定 Mapping Schema、執行查詢並輸出 XML 資料島。
<%@ Language=VBScript %>
<%
Dim sConn
sConn = "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=Northwind; User ID=SA; Password=;"
Dim adoConn
Set adoConn = Server.CreateObject("ADODB.Connection")
adoConn.ConnectionString = sConn
adoConn.CursorLocation = 3 ' adUseClient
adoConn.Open
Dim adoCmd
Set adoCmd = CreateObject("ADODB.Command")
Set adoCmd.ActiveConnection = adoConn
' 關鍵:使用 XPath 風格查詢,而非 T-SQL
adoCmd.CommandText = "Customer[@CompanyName='Tortuga Restaurante']"
' 關鍵:指定 SQLXML 方言 GUID
adoCmd.Dialect = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"
' 關鍵:指定 XDR Schema 檔案路徑
adoCmd.Properties("Mapping Schema") = "Orders.XML"
adoCmd.Properties("Base Path") = "C:\INETPUB\WWWROOT\PBA"
' 直接輸出至 Response 串流
adoCmd.Properties("Output Stream") = Response
Response.Write "<XML ID='MyDataIsle'>"
adoCmd.Execute , , 1024 ' adExecuteStream
Response.Write "</XML>"
%>
| 屬性 | 用途 | 備註 |
|---|---|---|
Dialect | 指定查詢語言方言 | 固定 GUID 代表 SQLXML XPath 查詢 |
Mapping Schema | XDR Schema 檔名 | 定義資料表/欄位到 XML 元素/屬性的對應 |
Base Path | Schema 檔案所在目錄 | 相對路徑基準 |
Output Stream | 結果輸出目標 | 此處直接串流至 HTTP 回應 |
adExecuteStream (1024) | 執行選項 | 表示命令輸出為串流 |
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="Customer" content="eltOnly">
<AttributeType name="CustomerID"/>
<AttributeType name="CompanyName"/>
<attribute type="CustomerID"/>
<attribute type="CompanyName"/>
<element type="Order"/>
</ElementType>
<ElementType name="Order" content="eltOnly">
<AttributeType name="OrderID"/>
<AttributeType name="OrderDate"/>
<attribute type="OrderID"/>
<attribute type="OrderDate"/>
</ElementType>
<sql:relationship name="CustOrders" parent="Customer" child="Order" parent-key="CustomerID" child-key="CustomerID" xmlns:sql="urn:schemas-microsoft-com:xml-sql"/>
</Schema>
瀏覽器將接收到如下 XML 資料島:
<XML ID='MyDataIsle'>
<Customer CustomerID="TORTU" CompanyName="Tortuga Restaurante">
<Order OrderID="10248" OrderDate="1996-07-04T00:00:00"/>
<Order OrderID="10249" OrderDate="1996-07-05T00:00:00"/>
</Customer>
</XML>
XDR Schema 為 SQL Server 2000 專有技術,後續版本(2005+)全面轉向 XSD Schema 並整合 FOR XML、OPENXML、xml 資料型別。新專案請直接採用 XSD + sql:relation/sql:field 註解映射,並搭配 sp_xml_preparedocument / OPENXML 或原生 XML 索引進行查詢。