一、簡介
Microsoft SQL Server 2000的 XML功能可以簡化將現有代碼作為 Web服務提供的任務。本文集中討論了傳入和傳出 Transact SQL代碼的數據與 XML消息(在 Web服務客戶機和服務器之間使用)之間的轉換。
二、SQL Server 2000中的現有代碼
SQL Server 2000的 XML功能簡化了將現有 Transact SQL代碼作為 Web服務提供的過程。這依賴於 SQL Server 2000中的兩項 XML功能:
1.對 Transact SQL的擴展可將關系型數據轉換為 XML,並且可以對傳入的 XML進行語法分析。利用 ISAPI模板功能,可將傳入的 HTTP請求應用於 Transact SQL代碼,並且可以使用 XSL樣式表對傳出的 XML進行轉換。只要可以使用 FOR XML子句“選定”數據,SQL Server就可以將 XML返回到 XML模板。
2.SQL Server 2000 XML模板
SQL Server 2000 XML模板以透明方式執行以下任務:
對傳入的 HTTP請求進行解碼將參數應用於 Transact SQL查詢執行查詢使用 XSL轉換傳出的 XML讀數據以下示例執行 ISAPI模板中指定的 Transact SQL。如果必要,可將 HTTP請求傳遞到 Transact SQL代碼,並由該代碼進行語法分析。根據模板中指定的 .xsl文件,返回的 XML將被轉換為 SOAP並返回給 Web服務的客戶:
Exec GetOrdersXML
以下是模板中引用的 XSL樣式表,它將存儲過程中的 XML轉換為 SOAP:
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:m="Some-URI">
最後,以下存儲過程代碼在 Transact SQL SELECT語句中使用 FOR XML EXPLICIT子句來返回 XML。“訂單”和“訂單詳細信息”從單獨的表中選擇,然後合並到 XML層次中:
/*訂單是父 XML元素 */
Select 1 as Tag, NULL as Parent,
Orders.OrderId AS [Order!1!OrderId],
Orders.OrderStatus AS [Order!1!OrderStatus],
Orders.OrderDate AS [Order!1!OrderDate],
Orders.SubTotal AS [Order!1!SubTotal],
Orders.Tax AS [Order!1!Tax],
Orders.ShippingHandling AS [Order!1!ShippingHandling],
Orders.ShipToName AS [Order!1!ShipToName],
Orders.ShipToAddressId AS [Order!1!ShipToAddressId],
NULL AS [OrderDetail!2!OrderDetailId],
NULL AS [OrderDetail!2!OrderId],
NULL AS [OrderDetail!2!ItemId],
NULL AS [OrderDetail!2!UnitPrice],
NULL AS [OrderDetail!2!Quantity]
from Orders
UNION ALL