成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

使SQL Server數據支持 XML

瀏覽:274日期:2023-10-31 11:07:37

學習如何用SQL Server的XML特征為你的數據庫提供新的功能。

如果你在IT業工作,那么你很可能聽說過XML;但如果你的工作主要與SQL Server有關,那么你可能并沒有直接運用過XML。XML已經是Web編程環境中的普遍的數據格式了,而且它也是.NET Framework中主要的底層技術之一。SQL Server以兩種方式來支持XML:通過SQL Server本身的功能,以及通過發布稱為SQLXML的額外的功能。SQLXML擴展了SQL Server,并提供了XML兼容性。在本月的專欄中,我將講述SQL Server對XML的內置的支持,并講述通過發布SQLXML而增加的一些功能(見 圖1)。SQL Server支持XML就意味著,我們可以更有效地更新和讀取數據了;我們不再需要將XML數據轉換成數據庫可以理解的另一種格式,或將XML數據從數據庫轉換成XML。而且,可供開發人員選擇的方法也更多了,就是說,他們在訪問數據方面更靈活了。

對XML的宣傳已經有很多了,所以重要的一點是要意識到它只是一門簡單的技術。本質上,它是用來描述數據的一個標準的文件格式。(有關XML基礎知識的更多的信息,請參閱工具條“XML 101”。)從發布SQL Server 2000的最初版本以來,對XML的支持就已經是SQL Server的一部分了。SQL Server不是通過提供一個方法保存XML文件來支持XML的,而是提供了一個到關系數據的接口,使你可以在表和其它數據庫對象中讀寫XML數據。SQL Server所固有的XML功能包括:可以通過HTTP、模板查詢、FOR XML子句和OPENXML()函數來訪問SQL Server。接下來,我將講述這些功能是如何運作的,以及它們可以如何使你的企業受益。

使SQL Server數據支持 XML

圖1. 提供 XML支持

要通過HTTP訪問一個SQL Server數據庫,你必須首先設置一個虛擬目錄。這個虛擬目錄在HTTP協議和一個特定的數據庫之間提供了一個鏈接。設置虛擬目錄時,我們需要用“Configure SQL XML Support In IIS”菜單條目,你可以在Window的Start菜單中的SQL Server菜單條目找到該項。通過該菜單條目,你就可以指定虛擬目錄的名稱、物理路徑、服務器名稱、數據庫名稱和注冊信息。一旦你創建了一個虛擬目錄,你就可以通過一個URL將查詢發送到數據庫了。如果你設置了一個叫做Northwind的虛擬目錄,并在瀏覽器中輸入了查詢http://localhost/Northwind?sql=SELECT+*+FROM+Shippers+FOR+XML+AUTO,ELEMENTS+&root=Shippers,它就會返回類似于“XML 101”工具條中的Shippers例子中的XML數據。與運用ADO或其它任何技術相比,HTTP查詢會讓我們更容易地來訪問網站或Web應用程序的數據。 對于一個簡單的查詢語句來說,HTTP查詢會很好,但對于一個更復雜的查詢來說,這種格式就會變得難以理解并很難管理了。這種方法也不安全,因為查詢源代碼是暴露給用戶的。另外一種可選方法是在HTTP上調用一個模板查詢。一個模板查詢就是一個包含SQL查詢的XML文件。模板作為文件保存在服務器上。因此,如果你在一個叫做GetShippers.xml的模板中封裝了Shippers SELECT查詢,那么URL查詢的形式就會是:http://localhost/Northwind/templates/GetShippers.xml。模板也可以帶有參數,當你的模板調用一個存儲過程時,該功能會很有用。在URL查詢和模板查詢中,如果你想從查詢返回一個HTML頁面,那么你可以指定一個XSLT樣式表,將它用于XML。模板查詢是讀取數據的一個更安全的方法,它可以被緩存以得到更好的性能。

你也可以用FOR XML子句將數據讀取成XML格式,該方法從SQL Server表中返回數據,你可以把它們看做是XML數據。你可以在一個SELECT語句中運用FOR XML子句,它有三種模式可以以不同的格式來返回XML:RAW、AUTO和EXPLICIT。RAW模式將結果中的每個記錄作為一個普通的行元素來返回,它被包含在一個標簽中,并將每個列的值作為一個屬性。AUTO模式將每個記錄作為行元素返回,根據源表或視圖對它進行命名。如果查詢從一個表返回多個列,那么每個列的值就會被作為表元素的屬性來返回。但最重要的是,如果你的SELECT語句執行了合并操作,那么AUTO模式就代表的是子行,它們作為元素嵌套在父行下。EXPLICIT模式有幾個參數,你可以通過這些參數完全定義返回的XML的樣式。你可以為每個元素定義標簽,明確確定數據是如何嵌套的。FOR XML語句使我們不必再返回一個rowset,然后在客戶端或中間層將它轉換成XML了。

OPENXML函數可以讓你像操作一個表那樣來運用XML數據,可以將它們轉換成內存中的一個rowset。要運用OPENXML,首先要調用sp_xml_preparedocument存儲過程,實際上,它將XML解析成一個數據樹,并將那個數據的句柄傳遞到OPENXML函數。然后你就可以操作那個數據了:進行查詢、將它插入到表中、等等。OPENXML函數可以帶有三個參數:用于XML文檔內部顯示的句柄、一個rowpattern參數和一個flags參數。Rowpattern參數指定了應該返回原始的XML文檔中的哪些節點。Flags參數指定了以屬性為中心的映射(結果集中列名符合屬性名)或以元素為中心的映射(結果集中列名符合元素名)。在處理完XML數據后,我們可以調用sp_xml_removedocument將XML數據從內存中刪除。

通過SQLXML得到更多的支持

通過發布SQLXML(也被稱為Web版),Microsoft也在SQL Server中提供了更多的XML支持。已經有三個SQLXML的版本了,它們包含的一些額外的功能有updategram和XML Bulk Load。你可以在線下載最新的版本SQLXML 3.0(見資源)。你可以通過基于XML的模板,運用updategram來插入、更新或刪除表中的數據。該模板有一個before block,它描述了記錄更新前的當前狀態;還有一個after block,它描述了記錄的變化。下面就是updategram的一個例子,它修改了Shippers表中的一個公司的Phone字段:

使SQL Server數據支持 XML

在缺省情況下,updategrams認為before block和after block中的字段指的是表和列。但updategrams也可以用一個mapping schema。Mapping schema將一個XML文檔中的元素與一個表中的元素關聯了起來。如果在上面的模板中,你引用屬性名SID,而不是ShipperID,那么mapping schema就會將SID映射到ShipperID列。你可以通過HTTP(同模板查詢一樣)或通過ADO將updategrams發送到SQL Server。它們也可以被參數化,帶有輸入值。Updategrams提供了一個方法,使我們可以直接從XML更新SQL Server數據,這樣就不用從XML文檔得到數據,然后再用一個記錄集或調用一個存儲過程了。Updategrams只是可以簡單地插入、更新或刪除數據,所以如果你需要查看一個值是否存在、或在更新前查看一些商業規則,那么你就應該用OPENXML。

雖然你可以用OPENXML函數和updategrams來插入數據,但對于加載大量的XML數據來說,這兩種方法都不實用。你應該用XML Bulk Load將大量的XML數據插入到SQL Server表中。實際上,我們是用SQLXMLBulkLoad組件來加載數據的,你可以從一個客戶端應用程序來調用這個組件。在建立到數據庫的連接后,bulk load組件需要一個路徑來訪問mapping schema,從而將XML屬性和元素映射到數據庫對象,而且還需要路徑來訪問一個XML文檔或一個XML流。在Bulk Load組件中,你可以指定是否執行數據表檢查約束(check constraint)、是否忽略通過復制鍵添加的記錄、當插入數據時,是否應該鎖定數據表,等等。

缺省情況下,大量加載不是事務處理型(transactional)的,所以如果出現錯誤,截止到錯誤點前插入的數據就會保留在數據庫中。你可以指定所有加載的數據都是在一個單獨的事務處理過程中的,因此該過程要么會十分成功,要么會回滾。如果你用了事務處理,所有的數據在插入前都會被寫進一個臨時的文件。這就意味著,你需要足夠的磁盤空間來保存臨時文件,而且加載數據可能會相當慢。XML Bulk Load給我們提供了一個很好的方法,使我們可以將大量的數據寫到SQL Server中;否則,你就必須提取數據,然后用另外的方法將它加載到你的數據庫中。

你也可以配置SQL Server來緩存XSLT樣式表、模板和mapping schema,從而得到更好的性能。根據具體實現情況,你可以在Web應用程序中用通過HTTP和XSLT的XML查詢來替代標準的ASP/ADO數據訪問,從而得到HTML輸出結果,這種方法可以極大地提高性能。

以上就是SQL Server對XML的一些高級支持。不管我們對它的宣傳有多少,XML的功能就這么多了。因為XML是用來顯示數據的一個標準,也是用于.NET的數據傳輸技術,因此,XML與SQL Server的集成能力就會是企業需要解決的一個重要的問題。

標簽: Sql Server 數據庫
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美图区在线视频| 欧美 日韩 国产在线| 懂色av一区二区在线播放| 日韩视频免费| 国产日产欧美精品一区二区三区| 国产酒店精品激情| 久久久久网址| 亚洲国产综合视频在线观看| 在线国产欧美| 国产精品久久久久久久久久久免费看 | 亚洲一区二区三区美女| 国产一区二区三区无遮挡| 精品久久免费看| 国产露脸91国语对白| 欧美日韩日日骚| 丝袜亚洲另类欧美综合| 国产精品视频免费观看| 1区2区3区精品视频| 亚洲一二三区精品| 国产精品麻豆久久久| 国产精品v日韩精品v欧美精品网站| 久久久精品人体av艺术| 91丝袜呻吟高潮美腿白嫩在线观看| 91精品久久久久久久91蜜桃| 精品一区二区在线看| 一本久久综合亚洲鲁鲁五月天 | 成人在线视频一区| 欧美一二三四在线| 国产在线一区二区| 日韩一区二区视频| www.亚洲精品| 26uuu欧美| 99久久er热在这里只有精品15| 日韩欧美一区中文| 国产99久久久久| 亚洲精品在线电影| 91首页免费视频| 国产精品激情偷乱一区二区∴| 今天的高清视频免费播放成人| 最新日韩在线视频| 国产日韩欧美一区在线| 亚洲图片欧美视频| 久久精选视频| 麻豆精品久久精品色综合| 欧美日韩色综合| 国产精品主播直播| 亚洲精品一区二区三区精华液| 91女人视频在线观看| 国产精品乱人伦一区二区| 亚洲精品自在在线观看| 一区二区成人在线| 久久亚洲综合| 狠狠色丁香久久婷婷综合丁香| 欧美精品在线观看播放| 风间由美一区二区av101| 久久综合九色综合97_久久久| 欧美日韩三级电影在线| 亚洲丝袜美腿综合| 国产亚洲一区二区三区在线播放| 亚洲成人高清在线| 久久久久一区二区三区| 久久电影网站中文字幕| 日韩一区二区三区三四区视频在线观看 | 亚洲色欲色欲www| 欧美一级久久| 国内精品久久久久影院薰衣草| 日韩欧美国产wwwww| 亚洲一级二级| 日韩不卡在线观看日韩不卡视频| 欧美一级专区免费大片| 亚洲欧美在线网| 亚洲成av人片一区二区| 8v天堂国产在线一区二区| 国产ts人妖一区二区| 国产三级精品在线| 亚洲神马久久| 麻豆精品在线播放| 久久久久久一二三区| 亚洲激情一区二区| 日韩精品成人一区二区三区| 日韩精品中午字幕| 国产精品videosex极品| 午夜国产不卡在线观看视频| 欧美一级黄色大片| 亚洲欧洲日夜超级视频| 久久不见久久见免费视频1| 国产网红主播福利一区二区| 久久国产精品久久精品国产 | 亚洲精品伦理在线| 欧美美女直播网站| 91视频免费播放| 亚洲成年人网站在线观看| 欧美一区二区视频在线观看2020| 91老司机福利 在线| 一区二区国产视频| 欧美电影精品一区二区| 国产日韩精品视频一区二区三区| 久久国产尿小便嘘嘘| 亚洲国产精品成人久久综合一区| 老牛影视一区二区三区| 99精品久久只有精品| 天堂影院一区二区| 久久精品日产第一区二区三区高清版| 日本黄色一区二区| 国产一区欧美| 精品在线视频一区| 自拍偷拍亚洲综合| 欧美电影一区二区| 亚洲欧洲另类| 国产精品一二三在| 亚洲国产成人av网| 国产欧美一区二区精品性色超碰 | 成人av免费在线播放| 亚洲图片一区二区| 中文字幕久久午夜不卡| 欧美日韩国产一级| 99精品99| www.99精品| 免费在线观看一区| 亚洲人成在线播放网站岛国| 91精品国产欧美日韩| 亚洲影院免费| 欧美成人tv| 久久丁香综合五月国产三级网站| 亚洲另类色综合网站| 精品国产区一区| 91久久精品一区二区三区| 欧美三区不卡| 东方欧美亚洲色图在线| 午夜精品成人在线视频| 中文字幕在线不卡一区二区三区| 这里只有精品免费| 色诱视频网站一区| 一本一道久久综合狠狠老精东影业 | 亚洲国产精品成人综合色在线婷婷| 4438x成人网最大色成网站| 久久亚洲午夜电影| 在线一区免费观看| 国外精品视频| 91理论电影在线观看| 国产精品99精品久久免费| 日韩精品福利网| 亚洲色图欧洲色图婷婷| 久久久九九九九| 日韩一级黄色大片| 欧美在线免费视屏| 亚洲综合首页| 亚洲美女毛片| 国产专区一区| 波波电影院一区二区三区| 精品一二三四区| 亚洲成av人片观看| 一区二区三区四区高清精品免费观看| 国产欧美视频一区二区| 日韩欧美成人激情| 欧美日韩亚洲综合在线| 久久精品一本| 国产日韩一区二区三区| 亚洲午夜在线观看| 欧美一区二区三区在线免费观看 | 午夜精品久久久久久| 一区二区在线观看视频| 中文字幕制服丝袜成人av| 久久综合一区二区| 日韩一级二级三级精品视频| 6080午夜不卡| 7777精品伊人久久久大香线蕉超级流畅 | 成人不卡免费av| 国产激情偷乱视频一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲午夜羞羞片| 亚洲国产精品视频| 亚洲一区二区三区美女| 一区二区三区自拍| 亚洲美女偷拍久久| 亚洲人成影院在线观看| 国产精品欧美精品| 国产精品天美传媒沈樵| 中文字幕av一区 二区| 欧美激情一区二区| 国产精品午夜免费| 中文字幕一区日韩精品欧美| 国产精品久久久久三级| 中文字幕在线不卡视频| 亚洲蜜桃精久久久久久久| 亚洲免费色视频| 亚洲黄色免费网站| 亚洲午夜激情网页| 亚洲高清不卡在线| 亚洲国产精品嫩草影院| 亚洲第一搞黄网站| 亚洲国产一区二区a毛片| 亚洲3atv精品一区二区三区| 日韩电影免费在线| 久久国产福利国产秒拍| 国产乱码精品一区二区三区av | 亚洲第一区色| 在线视频精品一区| 色综合久久88色综合天天6 | 亚洲黑丝在线|