<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 78,  comments - 48,  trackbacks - 0

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

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

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

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

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


    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


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

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

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

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


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


    相應(yīng)的存儲過程看起來就像下面這樣:
    . . .

    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))

    . . .

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

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

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

    ?

    posted on 2006-08-25 14:42 黑咖啡 閱讀(185) 評論(0)  編輯  收藏 所屬分類: Design

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿(2)

    隨筆分類(67)

    文章分類(43)

    Good Article

    Good Blogs

    Open Source

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧洲自拍拍偷精品 美利坚| 免费看一级毛片在线观看精品视频 | 亚在线观看免费视频入口| 欧美亚洲国产SUV| 亚洲另类视频在线观看| 国产av无码专区亚洲av桃花庵| 国产免费怕怕免费视频观看| 6080午夜一级毛片免费看6080夜福利 | 国产免费内射又粗又爽密桃视频 | 青青青免费国产在线视频小草| 91免费国产视频| 人人爽人人爽人人片A免费| 亚洲另类无码专区首页| 亚洲欧洲日产专区| 蜜芽亚洲av无码精品色午夜| 中文字幕在线亚洲精品| 久久国产成人精品国产成人亚洲 | 国产亚洲精品第一综合| 亚洲中文字幕无码中文| 亚洲中文无码av永久| 91情国产l精品国产亚洲区| 国产AV无码专区亚洲A∨毛片| 相泽亚洲一区中文字幕| 亚洲区小说区图片区| 亚洲av无码成人精品区在线播放| 天堂在线免费观看中文版| 一个人免费观看在线视频www| 国色精品卡一卡2卡3卡4卡免费| 国产在线jyzzjyzz免费麻豆| 曰批全过程免费视频网址| 7m凹凸精品分类大全免费| 中文字幕视频免费| 日本片免费观看一区二区| 一二三四在线观看免费高清中文在线观看| 7m凹凸精品分类大全免费| **aaaaa毛片免费| 18勿入网站免费永久| 国产免费av片在线看| 老司机永久免费网站在线观看| 波多野结衣久久高清免费| 老司机永久免费网站在线观看|