用XML和SQL 2000來管理預存程序調用

黄舟
發布: 2017-03-04 17:18:54
原創
1886 人瀏覽過

建立多個具有不同參數的預存程序(stored PRocedure)來完成同一個任務總是一個很大的負擔。利用xml字串向你的預存程序發送參數就能夠簡化這個任務;這也讓COM元件的設計更簡單。 

實現這個目的的方法是將你的參數作為一個XML字串來傳遞,並剖析XML來取回你所需要的數據,然後繼續實現你所需要整合的功能。你不僅可以透過XML來取得一些參數,還可以對XML所建立的DOM文件執行查詢,以此來封裝多個預存程序。我會提供一些例子,告訴你如果實現這個目的,並簡要地描述每個例子。

在本例裡,為了更新一個Customer表格裡的姓名字段,我會傳遞幾個參數。為了獲得customerid(身份列)和新的姓名字段,XML會被剖析。我傳遞給過程的XML字串就像下面的:

<root><Customer><customerid>3</customerid><name>Acme
 Inc.</name></Customer></root>
登入後複製

要被建立的儲存欄位就像下面的一樣:

CREATE PROCEDURE update_Customer (@xmldatavarchar(8000)) ASDECLARE @customeridintDECLARE @customernamevarchar(50)DECLARE @xmldata_idint
EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, &#39;&#39;
SELECT @customerid = customerid, @customername = [name] FROM OPENXML(@xmldata_id, &#39;//Customer&#39;, 2) WITH (customeridint, [name] varchar(50))
EXEC sp_xml_removedocument @xmldata_id
UPDATE Customer SET Customer.[name] = ISNULL(@customername, Customer.[name])WHERE Customer.tblID = @customerid
登入後複製

 

這個過程首先就聲明我們將要用到的變數會保存相關資訊。在此之後,DOM文件被打開,一個「句柄(handle)」會被回到sp_xml_preparedocument呼叫的第一個參數。

這個呼叫的第二個參數是用來新DOM文件的XML來源檔。這個「句柄」是在進行OPENXML呼叫的時候用來從DOM裡查詢資訊的。 OPENXML呼叫的第二個參數是父節點的一個Xpath映射,這些父節點包含有要執行的資料。
 


第三個參數(2)指明,以元素為中心的對應會被使用。 WITH子句為被剖析的資料提供了資料列集(rowset)格式,sp_xml_removedocument呼叫會刪除DOM文件的來源檔案。

在下面這個範例裡,我會傳遞一系列使用者ID,用以刪除多個資料列。下面就是XML字串的內容:

<root><Customer><customerid>1</customerid></Customer><Customer><customerid>
2</customerid></Customer><Customer><customerid>3</customerid></Customer>
</root>
登入後複製

 

對應的預存程序看起來就像下面這樣:

. . .
EXEC sp_xml_preparedocument @xml_id OUTPUT, @xmldata, &#39;&#39;
DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM OPENXML(@xmldata_id, &#39;//Customer&#39;, 2) WITH (customeridint))
. . .
登入後複製


有了這個預存程序就不再需要建立一個冗長的SQL查詢字串,用以在ADO裡傳遞或多次呼叫一個預存程序了。這也會消除多次呼叫對網路流量所造成的影響。

如你所能看到的,微軟的SQL 2000讓整個過程稍微簡單了一點。要記住,這個方法的缺點在於:在SQL 2000進行XML任務的時候,將XML作為一個參數發送會被限製到8,000字元。和以往一樣,不要忽視了精心策劃的好處。

存取MSDN函式庫能夠獲得更多關於OPENXML、sp_xml_preparedocument以及sp_xml_removedocument的資訊。

 以上就是用XML和SQL 2000來管理預存程序呼叫的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板