日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

使SQL Server數(shù)據(jù)支持 XML

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

學(xué)習(xí)如何用SQL Server的XML特征為你的數(shù)據(jù)庫提供新的功能。

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

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

使SQL Server數(shù)據(jù)支持 XML

圖1. 提供 XML支持

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

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

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

通過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字段:

使SQL Server數(shù)據(jù)支持 XML

在缺省情況下,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只是可以簡單地插入、更新或刪除數(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ù)庫的連接后,bulk load組件需要一個(gè)路徑來訪問mapping schema,從而將XML屬性和元素映射到數(shù)據(jù)庫對(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ù)庫中。你可以指定所有加載的數(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ù)庫中。

你也可以配置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è)重要的問題。

標(biāo)簽: Sql Server 數(shù)據(jù)庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av中文字幕一区| 三级欧美在线一区| 久久久蜜桃一区二区人| 久久99伊人| 日韩精品首页| 精品视频97| 久久精品99国产精品| 三级欧美在线一区| 亚洲高清二区| 日韩大片在线| 激情综合婷婷| 欧美激情三区| 国产欧美一区二区色老头| 久久av一区| 日韩一区二区久久| 久久蜜桃资源一区二区老牛| 久久影院一区二区三区| 欧美日韩一区二区三区在线电影| 亚洲视频综合| 视频福利一区| 91日韩在线| 高清一区二区三区av| 欧美韩一区二区| 国产精品久久久网站| 日本成人在线不卡视频| 视频一区在线播放| 久久国产毛片| 99久久www免费| 欧美日韩精品免费观看视完整| 精品久久91| 精品免费在线| 精品中文字幕一区二区三区| 国产美女视频一区二区| 最新国产精品| 日本成人在线一区| 国产精品中文| 日韩中文首页| 久久xxxx| 欧美1区2区3| 久久久久99| 亚洲精品三级| 国产一区二区三区黄网站| 婷婷成人在线| 日韩一区二区三区精品视频第3页| 牛牛精品成人免费视频| 久久久久免费av| 日韩中文字幕在线一区| 成人亚洲一区| 日韩视频久久| 国产精品一区二区三区av| 在线天堂资源www在线污| 欧美日韩国产传媒| 日韩av中文在线观看| 久久精品99国产精品| 一区二区三区午夜视频| 亚洲午夜精品久久久久久app| 国产亚洲毛片在线| 日韩免费一区| 日韩精品欧美精品| 日韩视频一区| 国产综合亚洲精品一区二| 亚洲精品免费观看| 国产亚洲午夜| 另类中文字幕国产精品| 久久久免费人体| 国产精品亚洲欧美日韩一区在线| 久久人人88| 中文字幕高清在线播放| 国产精品亚洲片在线播放| 日韩一区二区三区精品| 国产精品久久久一区二区| 欧美性www| 日韩电影免费网站| 四虎在线精品| 免费精品国产的网站免费观看| 亚洲成人va| 免费高潮视频95在线观看网站| 久久亚州av| 日韩激情网站| 激情久久婷婷| 美女网站视频一区| 亚洲一区资源| 日韩免费久久| 私拍精品福利视频在线一区| 欧美亚洲二区| 国产精品videossex久久发布| 欧美日本一区| 欧美精品影院| 综合色一区二区| 99久久久久| 亚洲黑丝一区二区| 午夜久久一区| 亚洲少妇诱惑| 激情婷婷久久| 另类欧美日韩国产在线| 久久精品国产精品亚洲毛片| 国产精东传媒成人av电影| 国产精品伦一区二区| 日韩在线卡一卡二| 色综合www| 久久国产人妖系列| 国产视频网站一区二区三区| 国产精品网址| 亚洲精品无播放器在线播放| 欧美aa国产视频| 视频一区二区三区入口| 日韩欧美激情| 欧美日韩一区二区三区在线电影| 国产精品高清一区二区| 国精品产品一区| 超碰超碰人人人人精品| 国产激情精品一区二区三区| 中文字幕日韩亚洲| 99国产成+人+综合+亚洲欧美| 麻豆亚洲精品| 欧美日本三区| 成午夜精品一区二区三区软件| 日本午夜精品视频在线观看| 欧美国产免费| 久久亚洲在线| 最新亚洲国产| 亚洲精品乱码日韩| 日韩中文字幕区一区有砖一区| 国产欧美一区二区三区米奇| 日韩av网站在线观看| 久久三级中文| 美女性感视频久久| 伊人成人网在线看| 91成人精品观看| 精品国产精品国产偷麻豆 | 婷婷精品在线| 日韩视频1区| 国产精品成久久久久| 欧美日韩激情| 久久亚洲色图| 久久久夜夜夜| 日本特黄久久久高潮| 国产福利91精品一区二区| 免费观看久久av| 日韩福利视频网| 吉吉日韩欧美| 水蜜桃久久夜色精品一区的特点| 日韩av资源网| 日本精品久久| 国产精品入口久久| 成人羞羞在线观看网站| 亚洲精品一二三**| 麻豆精品一区二区综合av| 久久久久亚洲精品中文字幕| 亚洲一区二区三区无吗| 日韩1区2区3区| 欧美aa一级| 国产精品美女| 中文字幕系列一区| 国产香蕉精品| 亚洲成人精选| 亚洲人成网77777色在线播放| 超碰99在线| 日韩精品免费视频一区二区三区| 欧洲av不卡| **爰片久久毛片| 久久超碰99| 中文在线日韩| 欧美亚洲国产精品久久| 日韩和欧美的一区| 日韩福利视频导航| 视频一区二区三区中文字幕| 欧美日韩一二| 国产精品成人国产| 亚洲播播91| 美腿丝袜亚洲一区| 亚洲视频国产| 香蕉国产精品| 亚洲精品少妇| 免费人成精品欧美精品| 欧美美女一区| 国产精品久久久久久久久久白浆 | 亚洲va久久久噜噜噜久久| 欧美伊人久久| 爽好多水快深点欧美视频| zzzwww在线看片免费| 国产精品午夜一区二区三区| 久久久精品五月天| 国内一区二区三区| 美腿丝袜亚洲三区| 亚洲一区久久| 色天使综合视频| 国产欧美成人| 国产日韩欧美中文在线| 岛国av在线播放| 国产精品**亚洲精品| 国产精品一区二区美女视频免费看| 日本在线观看不卡视频| 亚洲制服欧美另类| 欧美国产亚洲精品| 国产精品国产三级在线观看| 91久久久精品国产| 欧美三级精品| 久久久久久久欧美精品| 欧美日韩一区二区国产|