午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

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

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

瀏覽:27日期:2023-11-05 19:59:36

相比SQL Server 2000提供的FOR XML查詢,SQL Server 2005版本對(duì)現(xiàn)有功能增強(qiáng)的基礎(chǔ)上增加了不少新功能,最為吸引人的功能包括對(duì)Xml數(shù)據(jù)類型支持、使用PATH模式以及嵌套FOR XML查詢支持等,這意味著通過新的FOR XML查詢功能可以構(gòu)造出結(jié)構(gòu)更加靈活的Xml數(shù)據(jù)。

在SQL Server 2000中FOR XML查詢的結(jié)果是直接以文本方式返回到客戶端,為支持SQL Server 2005中的Xml數(shù)據(jù)類型,F(xiàn)OR XML 查詢提供了TYPE指令,通過TYPE支持返回結(jié)果將會(huì)變?yōu)閄ml數(shù)據(jù)類型。接下來以SQL Server2005中的AdventureWorks示例數(shù)據(jù)庫(kù)為例演練其功能。

先來看第一個(gè)SQL查詢:

DECLARE @TestStringValue nvarchar(1024);

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

WHERE ProductSubcategoryID = 9

FOR XML AUTO);

SELECT @TestStringValue;

輸出結(jié)果:

結(jié)果為字符串,只是內(nèi)容格式符合Xml片段要求,不過無法在SQL Server Management Studio中點(diǎn)擊以Xml方式顯示。

下面對(duì)SQL進(jìn)行修改,增加TYPE指令:

DECLARE @TestStringValue nvarchar(1024);

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

WHERE ProductSubcategoryID = 9

FOR XML AUTO,TYPE);

不出意外,查詢結(jié)果收到如下錯(cuò)誤提示:

不允許從數(shù)據(jù)類型xml 到nvarchar 的隱式轉(zhuǎn)換。請(qǐng)使用CONVERT 函數(shù)來運(yùn)行此查詢。

可見通過TYPE指令返回的數(shù)據(jù)已經(jīng)轉(zhuǎn)變成Xml類型,改進(jìn)后的查詢語(yǔ)句如下:

DECLARE @XmlTestValue xml;

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

WHERE ProductSubcategoryID = 9

FOR XML AUTO,TYPE);

SELECT @XmlTestValue;

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

了解了TYPE指令的功能后,就可以來看FOR XML查詢帶給開發(fā)者的更多驚喜。以示例數(shù)據(jù)庫(kù)的產(chǎn)品表(Production.Product)和產(chǎn)品分類子類表(Production.ProductSubcategory)為例進(jìn)行演示。

編寫產(chǎn)品子類別為“9”的產(chǎn)品數(shù)據(jù)查詢:

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;

輸出結(jié)果如下:

如果在產(chǎn)品查詢子句中不提供TYPE指令,那么輸出就會(huì)變成下面結(jié)果:

' />

以上幾個(gè)查詢結(jié)果都沒有帶命名空間,不過SQL Server 2005 通過WITH XMLNAMESPACES子句提供了對(duì)命名空間的支持,下面的查詢將顯示一個(gè)完整的帶默認(rèn)命名空間的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');

輸出結(jié)果:

如果采用默認(rèn)命名空間,編寫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');

輸出結(jié)果:

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

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');

輸出結(jié)果:

Rear Derailleur

Front Derailleur

在實(shí)際應(yīng)用過程中,以.NET平臺(tái)應(yīng)用開發(fā)為例,通過ADO.NET訪問SQL Server 2005返回的Xml數(shù)據(jù)結(jié)構(gòu)可以更加豐富,甚至可以做到不做Xml樣式轉(zhuǎn)換直接服務(wù)于上一層模塊。在企業(yè)應(yīng)用集成方面,以BizTalk平臺(tái)為例,在調(diào)用SQL Adapter的時(shí)候可以更加靈活,降低為了制定合理Xml Schema帶來的復(fù)雜性。目前,最新版本的BizTalk(2006 R2)對(duì)使用了SQL Server 2005加強(qiáng)FOR XML功能的存儲(chǔ)過程或SQL語(yǔ)句不支持通過SQL適配器向?qū)蒟ML Schema,不過這個(gè)問題可以直接通過Visual Studio IDE編寫符合實(shí)際格式的XML Schema來解決。

主站蜘蛛池模板: 青娱乐av在线 | 国产黄色av | 国产精品超碰 | 丁香色婷婷 | 亚洲男人天堂2023 | 亚洲a v网站| 五月婷婷丁香网 | 国产成人精品免费看在线播放 | 久久久女人 | 一级片中文字幕 | 日韩中文字幕精品 | 黄色片免费播放 | 亚洲欧洲av | 久久国产高清 | 色偷偷综合网 | 亚洲一区二区三区视频 | 99视频导航 | 男人的天堂欧美 | 日韩在线视频播放 | 天天做夜夜操 | 日韩在线小视频 | 亚洲卡一卡二卡三 | 亚洲在线中文字幕 | 第一福利在线 | 亚洲第一av在线 | 成年人在线观看网站 | 欧美成人午夜精品免费 | 福利视频在线播放 | 天天拍天天干 | 欧美一本在线 | 激情区| 日韩欧美黄色 | 五月婷久久| 久久亚洲影视 | 污视频在线观看网站 | 在线观看毛片网站 | 久久九九久久九九 | 天美传媒免费在线观看 | 高潮一区二区 | 找国产毛片看 | 亚洲黄色片 |