溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

用XML和SQL 2000來(lái)管理存儲(chǔ)過(guò)程調(diào)用的方法

發(fā)布時(shí)間:2020-10-19 15:27:13 來(lái)源:億速云 閱讀:149 作者:小新 欄目:編程語(yǔ)言

用XML和SQL 2000來(lái)管理存儲(chǔ)過(guò)程調(diào)用的方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!

創(chuàng)建多個(gè)帶有不同參數(shù)的存儲(chǔ)過(guò)程(stored PRocedure)來(lái)完成同一個(gè)任務(wù)總是一個(gè)很大的負(fù)擔(dān)。利用xml字符串向你的存儲(chǔ)過(guò)程發(fā)送參數(shù)就能夠簡(jiǎn)化這個(gè)任務(wù);這也讓COM組件的設(shè)計(jì)更簡(jiǎn)單。

實(shí)現(xiàn)這個(gè)目的的方法是將你的參數(shù)作為一個(gè)XML字符串來(lái)傳遞,并剖析XML來(lái)取回你所需要的數(shù)據(jù),然后繼續(xù)實(shí)現(xiàn)你所需要集成的功能。你不僅可以通過(guò)XML來(lái)獲取一些參數(shù),你還可以對(duì)XML所創(chuàng)建的DOM文檔運(yùn)行查詢,以此來(lái)封裝多個(gè)存儲(chǔ)過(guò)程。我會(huì)提供一些例子,告訴你如果實(shí)現(xiàn)這個(gè)目的,并簡(jiǎn)要地描述每個(gè)例子。

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

<root><Customer><customerid>3</customerid><name>Acme
 Inc.</name></Customer></root>

要被創(chuàng)建的存儲(chǔ)字段就像下面的這樣:

CREATE PROCEDURE update_Customer (@xmldatavarchar(8000)) ASDECLARE @customeridintDECLARE @customernamevarchar(50)DECLARE @xmldata_idint
EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, ''
SELECT @customerid = customerid, @customername = [name] FROM OPENXML(@xmldata_id, '//Customer', 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

這個(gè)過(guò)程首先就聲明我們將要用到的變量會(huì)保存相關(guān)信息。在此之后,DOM文檔被打開(kāi),一個(gè)“句柄(handle)”會(huì)被返回到sp_xml_preparedocument調(diào)用的第一參數(shù)里。

這個(gè)調(diào)用的第二個(gè)參數(shù)是用于新DOM文檔的XML源文件。這個(gè)“句柄”是在進(jìn)行OPENXML調(diào)用的時(shí)候用來(lái)從DOM里查詢信息的。OPENXML調(diào)用的第二個(gè)參數(shù)是父節(jié)點(diǎn)的一個(gè)Xpath映射,這些父節(jié)點(diǎn)包含有要被執(zhí)行的數(shù)據(jù)。


第三個(gè)參數(shù)(2)指明,以元素為中心的映射會(huì)被使用。WITH子句為被剖析的數(shù)據(jù)提供了數(shù)據(jù)列集(rowset)格式,sp_xml_removedocument調(diào)用會(huì)刪掉DOM文檔的源文件。

在下面這個(gè)例子里,我會(huì)傳遞一系列用戶ID,用以刪除多個(gè)數(shù)據(jù)列。下面就是XML字符串的內(nèi)容:

<root><Customer><customerid>1</customerid></Customer><Customer><customerid>
2</customerid></Customer><Customer><customerid>3</customerid></Customer>
</root>

相應(yīng)的存儲(chǔ)過(guò)程看起來(lái)就像下面這樣:

. . .
EXEC sp_xml_preparedocument @xml_id OUTPUT, @xmldata, ''
DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM OPENXML(@xmldata_id, '//Customer', 2) WITH (customeridint))
. . .


有了這個(gè)存儲(chǔ)過(guò)程就不再需要?jiǎng)?chuàng)建一個(gè)冗長(zhǎng)的SQL查詢字符串,用以在ADO里傳遞或者多次調(diào)用一個(gè)存儲(chǔ)過(guò)程了。這也會(huì)消除多次調(diào)用對(duì)網(wǎng)絡(luò)流量所造成的影響。

正如你能夠看到的,微軟的SQL 2000讓整個(gè)過(guò)程稍稍簡(jiǎn)單了一點(diǎn)。要記住,這一方法的不足之處在于:在SQL 2000進(jìn)行XML任務(wù)的時(shí)候,將XML作為一個(gè)參數(shù)發(fā)送會(huì)被限制到8,000字符。和以往一樣,不要忽視了精心策劃的好處。

訪問(wèn)MSDN庫(kù)能夠獲得更多關(guān)于OPENXML、sp_xml_preparedocument以及sp_xml_removedocument的信息。

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)用XML和SQL 2000來(lái)管理存儲(chǔ)過(guò)程調(diào)用的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI