| 通過SQLXML得到更多的支持
通過發(fā)布SQLXML(也被稱為Web版),Microsoft也在SQL Server中提供了更多的XML支持。已經(jīng)有三個(gè)SQLXML的版本了,它們包含的一些額外的功能有updategram和XML Bulk Load。你可以在線下載最新的版本SQLXML 3.0(見資源)。你可以通過基于XML的模板,運(yùn)用updategram來插入、更新或刪除表中的數(shù)據(jù)。該模板有一個(gè)before block,它描述了記錄更新前的當(dāng)前狀態(tài);還有一個(gè)after block,它描述了記錄的變化。下面就是updategram的一個(gè)例子,它修改了Shippers表中的一個(gè)公司的Phone字段:
<updg:sync > <updg:before> <Shippers ShipperID="3" /> </updg:before> <updg:after> <Shippers Phone="(503) 555-0108" /> </updg:after> </updg:sync> |
在缺省情況下,updategrams認(rèn)為before block和after block中的字段指的是表和列。但updategrams也可以用一個(gè)mapping schema。Mapping schema將一個(gè)XML文檔中的元素與一個(gè)表中的元素關(guān)聯(lián)了起來。如果在上面的模板中,你引用屬性名SID,而不是ShipperID,那么mapping schema就會(huì)將SID映射到ShipperID列。你可以通過HTTP(同模板查詢一樣)或通過ADO將updategrams發(fā)送到SQL Server。它們也可以被參數(shù)化,帶有輸入值。Updategrams提供了一個(gè)方法,使我們可以直接從XML更新SQL Server數(shù)據(jù),這樣就不用從XML文檔得到數(shù)據(jù),然后再用一個(gè)記錄集或調(diào)用一個(gè)存儲(chǔ)過程了。Updategrams只是可以簡(jiǎn)單地插入、更新或刪除數(shù)據(jù),所以如果你需要查看一個(gè)值是否存在、或在更新前查看一些商業(yè)規(guī)則,那么你就應(yīng)該用OPENXML。
雖然你可以用OPENXML函數(shù)和updategrams來插入數(shù)據(jù),但對(duì)于加載大量的XML數(shù)據(jù)來說,這兩種方法都不實(shí)用。你應(yīng)該用XML Bulk Load將大量的XML數(shù)據(jù)插入到SQL Server表中。實(shí)際上,我們是用SQLXMLBulkLoad組件來加載數(shù)據(jù)的,你可以從一個(gè)客戶端應(yīng)用程序來調(diào)用這個(gè)組件。在建立到數(shù)據(jù)庫(kù)的連接后,bulk load組件需要一個(gè)路徑來訪問mapping schema,從而將XML屬性和元素映射到數(shù)據(jù)庫(kù)對(duì)象,而且還需要路徑來訪問一個(gè)XML文檔或一個(gè)XML流。在Bulk Load組件中,你可以指定是否執(zhí)行數(shù)據(jù)表檢查約束(check constraint)、是否忽略通過復(fù)制鍵添加的記錄、當(dāng)插入數(shù)據(jù)時(shí),是否應(yīng)該鎖定數(shù)據(jù)表,等等。
缺省情況下,大量加載不是事務(wù)處理型(transactional)的,所以如果出現(xiàn)錯(cuò)誤,截止到錯(cuò)誤點(diǎn)前插入的數(shù)據(jù)就會(huì)保留在數(shù)據(jù)庫(kù)中。你可以指定所有加載的數(shù)據(jù)都是在一個(gè)單獨(dú)的事務(wù)處理過程中的,因此該過程要么會(huì)十分成功,要么會(huì)回滾。如果你用了事務(wù)處理,所有的數(shù)據(jù)在插入前都會(huì)被寫進(jìn)一個(gè)臨時(shí)的文件。這就意味著,你需要足夠的磁盤空間來保存臨時(shí)文件,而且加載數(shù)據(jù)可能會(huì)相當(dāng)慢。XML Bulk Load給我們提供了一個(gè)很好的方法,使我們可以將大量的數(shù)據(jù)寫到SQL Server中;否則,你就必須提取數(shù)據(jù),然后用另外的方法將它加載到你的數(shù)據(jù)庫(kù)中。
你也可以配置SQL Server來緩存XSLT樣式表、模板和mapping schema,從而得到更好的性能。根據(jù)具體實(shí)現(xiàn)情況,你可以在Web應(yīng)用程序中用通過HTTP和XSLT的XML查詢來替代標(biāo)準(zhǔn)的ASP/ADO數(shù)據(jù)訪問,從而得到HTML輸出結(jié)果,這種方法可以極大地提高性能。
以上就是SQL Server對(duì)XML的一些高級(jí)支持。不管我們對(duì)它的宣傳有多少,XML的功能就這么多了。因?yàn)閄ML是用來顯示數(shù)據(jù)的一個(gè)標(biāo)準(zhǔn),也是用于.NET的數(shù)據(jù)傳輸技術(shù),因此,XML與SQL Server的集成能力就會(huì)是企業(yè)需要解決的一個(gè)重要的問題。
|