創建多個帶有不同參數的存儲過程(stored procedure)來完成同一個任務總是一個很大的負擔。利用XML字符串向你的存儲過程發送參數就能夠簡化這個任務;這也讓COM組件的設計更簡單。 實現這個目的的方法是將你的參數作為一個XML字符串來傳遞,并剖析XML來取回你所需要的數據,然后繼續實現你所需要集成的功能。你不僅可以通過XML來獲取一些參數,你還可以對XML所創建的DOM文檔運行查詢,以此來封裝多個存儲過程。我會提供一些例子,告訴你如果實現這個目的,并簡要地描述每個例子。 在本例里,為了更新一個Customer表格里的姓名字段,我會傳遞幾個參數。為了獲得customerid(身份列)和新的姓名字段,XML會被剖析。我傳遞給過程的XML字串就像下面的這樣: <root><Customer><customerid>3</customerid><name>Acme 要被創建的存儲字段就像下面的這樣:
EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, '' SELECT @customerid = customerid, @customername = [name] FROM EXEC sp_xml_removedocument @xmldata_id UPDATE Customer SET Customer.[name] = ISNULL(@customername, Customer.[name])
這個過程首先就聲明我們將要用到的變量會保存相關信息。在此之后,DOM文檔被打開,一個“句柄(handle)”會被返回到sp_xml_preparedocument調用的第一參數里。 這個調用的第二個參數是用于新DOM文檔的XML源文件。這個“句柄”是在進行OPENXML調用的時候用來從DOM里查詢信息的。OPENXML調用的第二個參數是父節點的一個Xpath映射,這些父節點包含有要被執行的數據。
在下面這個例子里,我會傳遞一系列用戶ID,用以刪除多個數據列。下面就是XML字符串的內容:
相應的存儲過程看起來就像下面這樣: EXEC sp_xml_preparedocument @xml_id OUTPUT, @xmldata, '' DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM . . .
正如你能夠看到的,微軟的SQL 2000讓整個過程稍稍簡單了一點。要記住,這一方法的不足之處在于:在SQL 2000進行XML任務的時候,將XML作為一個參數發送會被限制到8,000字符。和以往一樣,不要忽視了精心策劃的好處。 訪問MSDN庫能夠獲得更多關于OPENXML、sp_xml_preparedocument以及sp_xml_removedocument的信息。
|
溫馨提示:喜歡本站的話,請收藏一下本站!