| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> mssql >> SQL Server 2005 FOR XML嵌套查詢使用詳解
 

SQL Server 2005 FOR XML嵌套查詢使用詳解

2008-07-18 06:17:32  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  相比SQL Server 2000提供的FOR XML查詢,SQL Server 2005版本對現有功能增強的基礎上增加了不少新功能,最爲吸引人的功能包括對Xml數據類型支持、使用PATH模式以及嵌套FOR XML查詢支持等,這意味著通過新的FOR XML查詢功能可以構造出結構更加靈活的Xml數據。

  在SQL Server 2000中FOR XML查詢的結果是直接以文本方式返回到客戶端,爲支持SQL Server 2005中的Xml數據類型,FOR XML 查詢提供了TYPE指令,通過TYPE支持返回結果將會變爲Xml數據類型。接下來以SQL Server2005中的AdventureWorks示例數據庫爲例演練其功能。

  先來看第一個SQL查詢:

  DECLARE @TestStringValue nvarchar(1024);

  SET @TestStringValue = (SELECT ProductID,[Name] FROM Production.Product

  WHERE ProductSubcategoryID = 9

  FOR XML AUTO);

  SELECT @TestStringValue;

  輸出結果:

  結果爲字符串,只是內容格式符合Xml片段要求,不過無法在SQL Server Management Studio中點擊以Xml方式顯示。

  下面對SQL進行修改,增加TYPE指令:

  DECLARE @TestStringValue nvarchar(1024);

  SET @TestStringValue = (SELECT ProductID,[Name] FROM Production.Product

  WHERE ProductSubcategoryID = 9

  FOR XML AUTO,TYPE);

  不出意外,查詢結果收到如下錯誤提示:

  不允許從數據類型xml 到nvarchar 的隱式轉換。請使用CONVERT 函數來運行此查詢。

  可見通過TYPE指令返回的數據已經轉變成Xml類型,改進後的查詢語句如下:

  DECLARE @XmlTestValue xml;

  SET @XmlTestValue = (SELECT ProductID,[Name] FROM Production.Product

  WHERE ProductSubcategoryID = 9

  FOR XML AUTO,TYPE);

  SELECT @XmlTestValue;

  通過SELECT 返回的結果支持Xml方式顯示。

  了解了TYPE指令的功能後,就可以來看FOR XML查詢帶給開發者的更多驚喜。以示例數據庫的産品表(Production.Product)和産品分類子類表(Production.ProductSubcategory)爲例進行演示。

  編寫産品子類別爲「9」的産品數據查詢:

  SELECT ProductSubcategoryID,[Name] ,

  (SELECT ProductID,[Name] FROM Production.Product Product

  WHERE ProductSubcategoryID = 9

  FOR XML AUTO,TYPE) AS Products

  FROM Production.ProductSubcategory AS Category

  WHERE ProductSubcategoryID = 9

  FOR XML AUTO;

  輸出結果如下:

  

  如果在産品查詢子句中不提供TYPE指令,那麽輸出就會變成下面結果:

  " />

  以上幾個查詢結果都沒有帶命名空間,不過SQL Server 2005 通過WITH XMLNAMESPACES子句提供了對命名空間的支持,下面的查詢將顯示一個完整的帶默認命名空間的Xml文檔。

  WITH XMLNAMESPACES ('uri0' as ns0)

  SELECT ProductSubcategoryID,[Name] ,

  (SELECT ProductID,[Name] FROM Production.Product Product

  WHERE ProductSubcategoryID = 9

  FOR XML RAW('ns0:Product'),TYPE) AS 'ns0:Products'

  FROM Production.ProductSubcategory AS Category

  WHERE ProductSubcategoryID = 9

  FOR XML RAW('ns0:Category'),ROOT('ns0:Message');

  輸出結果:

  

  

  如果采用默認命名空間,編寫SQL如下:

  WITH XMLNAMESPACES (DEFAULT 'http://blog.csdn.net/zhzuo')

  SELECT ProductSubcategoryID,[Name] ,

  (SELECT ProductID,[Name] FROM Production.Product Product

  WHERE ProductSubcategoryID = 9

  FOR XML AUTO,TYPE) AS Products

  FROM Production.ProductSubcategory AS Category

  WHERE ProductSubcategoryID = 9

  FOR XML AUTO,ROOT('Message');

  輸出結果:

  

  

  另外,在SQL Server 2005中增加了FOR XML PATH 模式,通過使用FOR XML PATH 模式可以建立清晰靈活的Xml格式,相比使用FOR XML EXPLICIT更爲簡單:

  WITH XMLNAMESPACES (DEFAULT 'http://blog.csdn.net/zhzuo')

  SELECT ProductID AS 'Product/@ProductID',

  Name AS 'Product/Name'

  FROM Production.Product

  WHERE ProductSubcategoryID = 9

  FOR XML PATH(''),ROOT('Products');

  輸出結果:

  Rear Derailleur

  Front Derailleur

  

  在實際應用過程中,以.NET平台應用開發爲例,通過ADO.NET訪問SQL Server 2005返回的Xml數據結構可以更加豐富,甚至可以做到不做Xml樣式轉換直接服務于上一層模塊。在企業應用集成方面,以BizTalk平台爲例,在調用SQL Adapter的時候可以更加靈活,降低爲了制定合理Xml Schema帶來的複雜性。目前,最新版本的BizTalk(2006 R2)對使用了SQL Server 2005加強FOR XML功能的存儲過程或SQL語句不支持通過SQL適配器向導生成XML Schema,不過這個問題可以直接通過Visual Studio IDE編寫符合實際格式的XML Schema來解決。
 
 
 
上一篇《SQL Server 2000數據庫FOR XML查詢概述》
下一篇《使用T-SQL強制所有用戶退出當前數據庫》
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

 
 
 
相比SQL Server 2000提供的FOR XML查詢,SQL Server 2005版本對現有功能增強的基礎上增加了不少新功能,最爲吸引人的功能包括對Xml數據類型支持、使用PATH模式以及嵌套FOR XML查詢支持等,這意味著通過新的FOR XML查詢功能可以構造出結構更加靈活的Xml數據。 在SQL Server 2000中FOR XML查詢的結果是直接以文本方式返回到客戶端,爲支持SQL Server 2005中的Xml數據類型,FOR XML 查詢提供了TYPE指令,通過TYPE支持返回結果將會變爲Xml數據類型。接下來以SQL Server2005中的AdventureWorks示例數據庫爲例演練其功能。 先來看第一個SQL查詢: DECLARE @TestStringValue nvarchar(1024); SET @TestStringValue = (SELECT ProductID,[Name] FROM Production.Product WHERE ProductSubcategoryID = 9 FOR XML AUTO); SELECT @TestStringValue; 輸出結果: 結果爲字符串,只是內容格式符合Xml片段要求,不過無法在SQL Server Management Studio中點擊以Xml方式顯示。 下面對SQL進行修改,增加TYPE指令: DECLARE @TestStringValue nvarchar(1024); SET @TestStringValue = (SELECT ProductID,[Name] FROM Production.Product WHERE ProductSubcategoryID = 9 FOR XML AUTO,TYPE); 不出意外,查詢結果收到如下錯誤提示: 不允許從數據類型xml 到nvarchar 的隱式轉換。請使用CONVERT 函數來運行此查詢。 可見通過TYPE指令返回的數據已經轉變成Xml類型,改進後的查詢語句如下: DECLARE @XmlTestValue xml; SET @XmlTestValue = (SELECT ProductID,[Name] FROM Production.Product WHERE ProductSubcategoryID = 9 FOR XML AUTO,TYPE); SELECT @XmlTestValue; 通過SELECT 返回的結果支持Xml方式顯示。 了解了TYPE指令的功能後,就可以來看FOR XML查詢帶給開發者的更多驚喜。以示例數據庫的産品表(Production.Product)和産品分類子類表(Production.ProductSubcategory)爲例進行演示。 編寫産品子類別爲「9」的産品數據查詢: SELECT ProductSubcategoryID,[Name] , (SELECT ProductID,[Name] FROM Production.Product Product WHERE ProductSubcategoryID = 9 FOR XML AUTO,TYPE) AS Products FROM Production.ProductSubcategory AS Category WHERE ProductSubcategoryID = 9 FOR XML AUTO; 輸出結果如下: 如果在産品查詢子句中不提供TYPE指令,那麽輸出就會變成下面結果: " /> 以上幾個查詢結果都沒有帶命名空間,不過SQL Server 2005 通過WITH XMLNAMESPACES子句提供了對命名空間的支持,下面的查詢將顯示一個完整的帶默認命名空間的Xml文檔。 WITH XMLNAMESPACES ('uri0' as ns0) SELECT ProductSubcategoryID,[Name] , (SELECT ProductID,[Name] FROM Production.Product Product WHERE ProductSubcategoryID = 9 FOR XML RAW('ns0:Product'),TYPE) AS 'ns0:Products' FROM Production.ProductSubcategory AS Category WHERE ProductSubcategoryID = 9 FOR XML RAW('ns0:Category'),ROOT('ns0:Message'); 輸出結果: 如果采用默認命名空間,編寫SQL如下: WITH XMLNAMESPACES (DEFAULT 'http://blog.csdn.net/zhzuo') SELECT ProductSubcategoryID,[Name] , (SELECT ProductID,[Name] FROM Production.Product Product WHERE ProductSubcategoryID = 9 FOR XML AUTO,TYPE) AS Products FROM Production.ProductSubcategory AS Category WHERE ProductSubcategoryID = 9 FOR XML AUTO,ROOT('Message'); 輸出結果: 另外,在SQL Server 2005中增加了FOR XML PATH 模式,通過使用FOR XML PATH 模式可以建立清晰靈活的Xml格式,相比使用FOR XML EXPLICIT更爲簡單: WITH XMLNAMESPACES (DEFAULT 'http://blog.csdn.net/zhzuo') SELECT ProductID AS [url=mailto:]'Product/@ProductID'[/url], Name AS 'Product/Name' FROM Production.Product WHERE ProductSubcategoryID = 9 FOR XML PATH(''),ROOT('Products'); 輸出結果: Rear Derailleur Front Derailleur 在實際應用過程中,以.NET平台應用開發爲例,通過ADO.NET訪問SQL Server 2005返回的Xml數據結構可以更加豐富,甚至可以做到不做Xml樣式轉換直接服務于上一層模塊。在企業應用集成方面,以BizTalk平台爲例,在調用SQL Adapter的時候可以更加靈活,降低爲了制定合理Xml Schema帶來的複雜性。目前,最新版本的BizTalk(2006 R2)對使用了SQL Server 2005加強FOR XML功能的存儲過程或SQL語句不支持通過SQL適配器向導生成XML Schema,不過這個問題可以直接通過Visual Studio IDE編寫符合實際格式的XML Schema來解決。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
微光夜曲_朦胧的美
青春校園_女生娜娜
氣質佳人_唯美動人
新年時尚魅力女生
痞子的甘南日記
疑是銀河落九天
雪域壩上四——純美色
冬日戀歌——西城楊柳弄輕柔
 
>>返回首頁<<
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有