如何用SQL資料支援XML

2021-03-31 08:56:59 字數 2623 閱讀 2845

如果你在it業工作,那麼你很可能聽說過xml;但如果你的工作主要與sql server有關,那麼你可能並沒有直接運用過xml。xml已經是web程式設計環境中的普遍的資料格式了,而且它也是.*** framework中主要的底層技術之一。sql server以兩種方式來支援xml:通過sql server本身的功能,以及通過發布稱為sqlxml的額外的功能。sqlxml擴充套件了sql server,並提供了xml相容性。在本月的專欄中,我將講述sql server對xml的內建的支援,並講述通過發布sqlxml而增加的一些功能(見 圖1)。sql server支援xml就意味著,我們可以更有效地更新和讀取資料了;我們不再需要將xml資料轉換成資料庫可以理解的另一種格式,或將xml資料從資料庫轉換成xml。而且,可供開發人員選擇的方法也更多了,就是說,他們在訪問資料方面更靈活了。

對xml的宣傳已經有很多了,所以重要的一點是要意識到它只是一門簡單的技術。本質上,它是用來描述資料的乙個標準的檔案格式。從發布sql server 2000的最初版本以來,對xml的支援就已經是sql server的一部分了。sql server不是通過提供乙個方法儲存xml檔案來支援xml的,而是提供了乙個到關係資料的介面,使你可以在表和其它資料庫物件中讀寫xml資料。 sql server所固有的xml功能包括:可以通過http、模板查詢、for xml子句和openxml()函式來訪問sql server。接下來,我將講述這些功能是如何運作的,以及它們可以如何使你的企業受益。

圖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得到更多的支援

dianne siebold是san diego一家軟體公司的商業分析主管,也是位專門從事vb和sql server開發的程式設計師。她是v**的定期撰稿人,也是visual basic developer』s guide to sql server (sybex,2000)一書的作者。她的****是dsiebold@earthlink.***。

如何用XML實現高效管理資料

xml資料是web上資料交換和表達的標準形式,和關聯式資料庫相比,xml資料可以表達具有複雜結構的資料,比如樹結構的資料。正因為此,在資訊整合系統中,xml資料經常被用作資訊轉換的標準。bitscn com 管理三大領域資料 bbs.bitscn.com網管論壇 基於xml資料的特點,xml資料的高...

如何用XML資料繫結前台Repeater

最近有朋友問到我如何用xml資料繫結前台repeater檔案,我查了一下以前做的專案,這裡給大家介紹一下,方便大家也方便我自己日後查詢。廢話少說,上 前台檔案 aspx 在aspx前台頁面引用xml命名空間 page language c autoeventwireup true codebehin...

如何用SQL語句查詢Excel資料?

q 如何用sql語句查詢excel資料?a 下列語句可在sql server中查詢excel工作表中的資料。excel 2007和2010版本 select from opendatasource microsoft.ace.oledb.12.0 data source c book1.xlsx u...