March 30, 2008
willeam
在天空部落發表於22:26:37 |
BizTalk Server
在BizTalk專案的開發過程中,常常會須要將資料庫的資料抓取出來給BizTalk處理,這時候最常採用的方式是透過撰寫store procedure來取得資料庫資料.有時候store procedure只需要透過簡單的join語法就可以將資料抓取出來,有時候須加上cursor或複雜的處理後才能取得所需的資料.有時候還會面臨資料結構性複雜的問題,這時候可能就無法單純的用join的方式取得資料.在這邊介紹一個語法給大家參考,這個語法可幫助解決大部分複雜的結構性問題.
語法示範如下
ALTER PROCEDURE SP_GET_OP_ORDER
AS
BEGIN
SELECT *,
(select * from OrderDetail where OrderHeader.OrderID=OrderDetail.OrderID
for xml path('DETAIL'), binary base64, type)
from OrderHeader
for xml path('HEAD'), binary base64, type
END
GO

透過此方法可以任意指定輸出的結構階層,假如HEAD底下還需要其他子節點也都可以輕易辦到.
不過,這個語法有個缺點,就是無法透過Schema Generation Wizard自動產生schema,所以只好用手動的方式,先執行該Store procedure取得sample xml後,再用xml regen出schema,以上是我個人的經驗,提供給大家參考.




