濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > 用XML和SQL 2000來管理存儲(chǔ)過程調(diào)用

用XML和SQL 2000來管理存儲(chǔ)過程調(diào)用

熱門標(biāo)簽:r語言數(shù)據(jù)可視化地圖標(biāo)注 東營(yíng)電銷 南寧網(wǎng)絡(luò)外呼系統(tǒng)運(yùn)營(yíng)商 本地電話機(jī)器人 隨州外呼調(diào)研系統(tǒng) 高德地圖地圖標(biāo)注服務(wù)中心 400電話辦理包年 如何修改多個(gè)百度地圖標(biāo)注 微信地圖標(biāo)注合并了

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

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

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

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

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


CREATE PROCEDURE update_Customer (@xmldatavarchar(8000)) AS
DECLARE @customeridint
DECLARE @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è)過程首先就聲明我們將要用到的變量會(huì)保存相關(guān)信息。在此之后,DOM文檔被打開,一個(gè)“句柄(handle)”會(huì)被返回到sp_xml_preparedocument調(diào)用的第一參數(shù)里。

這個(gè)調(diào)用的第二個(gè)參數(shù)是用于新DOM文檔的XML源文件。這個(gè)“句柄”是在進(jìn)行OPENXML調(diào)用的時(shí)候用來從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ǔ)過程看起來就像下面這樣:
. . .

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

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

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


 

標(biāo)簽:拉薩 宿遷 德州 果洛 西雙版納 益陽 寧夏 黃石

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用XML和SQL 2000來管理存儲(chǔ)過程調(diào)用》,本文關(guān)鍵詞  用,XML,和,SQL,2000,來,管理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用XML和SQL 2000來管理存儲(chǔ)過程調(diào)用》相關(guān)的同類信息!
  • 本頁收集關(guān)于用XML和SQL 2000來管理存儲(chǔ)過程調(diào)用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    新野县| 裕民县| 宜宾市| 盐城市| 依兰县| 建德市| 铁岭市| 巍山| 宜宾市| 长岛县| 罗江县| 秦安县| 海宁市| 和顺县| 邹城市| 海阳市| 东方市| 隆尧县| 昆山市| 大关县| 伊吾县| 娄烦县| 荥阳市| 香格里拉县| 新田县| 贡觉县| 梁河县| 丹棱县| 资溪县| 松原市| 桦南县| 冀州市| 景泰县| 射洪县| 郓城县| 瑞安市| 蓝田县| 旌德县| 兰考县| 桂阳县| 台中县|