一簡介 Microsoft SQL Server
的 XML功能可以簡化將現有代碼作為 Web服務提供的任務
本文集中討論了傳入和傳出 Transact SQL代碼的數據與 XML消息(在 Web服務客戶機和服務器之間使用)之間的轉換
二SQL Server 中的現有代碼 SQL Server
的 XML功能簡化了將現有 Transact SQL代碼作為 Web服務提供的過程
這依賴於 SQL Server
中的兩項 XML功能
對 Transact SQL的擴展可將關系型數據轉換為 XML
並且可以對傳入的 XML進行語法分析
利用 ISAPI模板功能
可將傳入的 HTTP請求應用於 Transact SQL代碼
並且可以使用 XSL樣式表對傳出的 XML進行轉換
只要可以使用 FOR XML子句
選定
數據
SQL Server就可以將 XML返回到 XML模板
SQL Server
XML模板
SQL Server
XML模板以透明方式執行以下任務
對傳入的 HTTP請求進行解碼將參數應用於 Transact SQL查詢執行查詢使用 XSL轉換傳出的 XML讀數據以下示例執行 ISAPI模板中指定的 Transact SQL
如果必要
可將 HTTP請求傳遞到 Transact SQL代碼
並由該代碼進行語法分析
根據模板中指定的
xsl文件
返回的 XML將被轉換為 SOAP並返回給 Web服務的客戶
Exec GetOrdersXML
以下是模板中引用的 XSL樣式表
它將存儲過程中的 XML轉換為 SOAP
xmlns:SOAP
ENV=
xmlns:m=
Some
URI
>
最後
以下存儲過程代碼在 Transact SQL SELECT語句中使用 FOR XML EXPLICIT子句來返回 XML
訂單
和
訂單詳細信息
從單獨的表中選擇
然後合並到 XML層次中
/*訂單是父 XML元素 */
Select
as Tag
NULL as Parent
Orders
OrderId AS [Order!
!OrderId]
Orders
OrderStatus AS [Order!
!OrderStatus]
Orders
OrderDate AS [Order!
!OrderDate]
Orders
SubTotal AS [Order!
!SubTotal]
Orders
Tax AS [Order!
!Tax]
Orders
ShippingHandling AS [Order!
!ShippingHandling]
Orders
ShipToName AS [Order!
!ShipToName]
Orders
ShipToAddressId AS [Order!
!ShipToAddressId]
NULL AS [OrderDetail!
!OrderDetailId]
NULL AS [OrderDetail!
!OrderId]
NULL AS [OrderDetail!
!ItemId]
NULL AS [OrderDetail!
!UnitPrice]
NULL AS [OrderDetail!
!Quantity]
from Orders
UNION ALL
/*訂單詳細信息是子 XML元素 */
select
as tag
as parent
Orders
OrderId AS [Order!
!OrderId]
NULL AS [Order!
!OrderStatus]
NULL AS [Order!
!OrderDate]
NULL AS [Order!
!SubTotal]
NULL AS [Order!
!Tax]
NULL AS [Order!
!ShippingHandling]
NULL AS [Order!
!ShipToName]
NULL AS [Order!
!ShipToAddressId]
OrderDetails
OrderDetailId AS [OrderDetail!
!OrderDetailId]
OrderDetails
OrderId AS [OrderDetail!
!OrderId]
OrderDetails
ItemId AS [OrderDetail!
!ItemId]
OrderDetails
UnitPrice AS [OrderDetail!
!UnitPrice]
OrderDetails
Quantity AS [OrderDetail!
!Quantity]
from Orders
OrderDetails
where Orders
OrderId = OrderDetails
OrderId
ORDER BY [Order!
!OrderId]
[OrderDetail!
!OrderDetailId]
For XML EXPLICIT 寫數據
以下示例中
通過 HTTP請求提供表示層次行數據的 XML
然後將其傳遞到 ISAPI模板中指定的 Transact SQL代碼
在存儲過程中對 XML進行語法分析
並進行相應的寫入操作
Create Procedure InsertOrder
@Order NVARCHAR(
) = NULL
@OrderId int Output
DECLARE @hDoc INT
DECLARE @PKId INT
BEGIN TRANSACTION
/*將 XML載入文檔以進行分析 */
EXEC sp_xml_preparedocument @hDoc OUTPUT
@Order
/*插入訂單標頭 */
INSERT Orders(CustomerId
OrderDate
ShipToName
ShipToAddressId
OrderStatus)
SELECT *
FROM OPENXML(@hDoc
/NewDataSet/Orders
)
WITH ( CustomerId int
CustomerId
OrderDate Datetime
OrderDate
ShipToName nvarchar(
)
ShipToName
ShipToAddressId int
ShipToAddressId
OrderStatus int
OrderStatus
)
SELECT @PKId = @@IDENTITY
/*插入訂單詳細信息 */
INSERT OrderDetails (OrderId
ItemId
UnitPrice
Quantity)
SELECT @PKId as OrderId
ItemId
UnitPrice
Quantity
FROM OPENXML(@hDoc
/NewDataSet/Details
)
WITH ( ItemId int
ItemId
UnitPrice money
UnitPrice
Quantity int
Quantity
)
/*指定輸出參數的值 */
Select @OrderId = @PKId
COMMIT TRANSACTION
/*清除 XML文檔 */
EXEC sp_xml_removedocument @hD
From:http://tw.wingwit.com/Article/os/fwq/201311/10240.html