真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

FORXML中RAW模式的示例分析

這篇文章主要介紹FOR XML中RAW模式的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)長期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為木蘭企業(yè)提供專業(yè)的網(wǎng)站制作、成都網(wǎng)站設(shè)計木蘭網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

描述:

raw模式將查詢結(jié)果集中的每一行轉(zhuǎn)換為帶有元素名稱的xml元素,將每一行的列轉(zhuǎn)換為row的屬性.

可以通過編寫嵌套FOR XML查詢來生成XML層次結(jié)構(gòu)

在默認(rèn)情況下,所有非null值都將被映射為元素的屬性.

如果需要將查詢結(jié)果集中數(shù)據(jù)轉(zhuǎn)換為元素的子元素,需要使用elements指令.

語法:

FOR XML
RAW [ ('ElementName') ] 
    [ 
        
       [ , { XMLDATA | XMLSCHEMA [ ('TargetNameSpaceURI') ]} ] 
       [ , ELEMENTS [ XSINIL | ABSENT ] 
    ]  ::= 
   [ , BINARY BASE64 ]
   [ , TYPE ]
   [ , ROOT [ ('RootName') ] ]

具體參見例子:

建表Base,表結(jié)構(gòu)如下:

列名數(shù)據(jù)類型允許空
idint允許
bodynvarchar(50)允許

插入表數(shù)據(jù)如下:

idbody
1aaaa
2bbbb
3cccc
4

例句:

A.返回查詢數(shù)據(jù)的信息,使用for xml raw 模式

/*
結(jié)果:
    
    
    
    
*/select * from base for xml raw;

通過指定ELEMENTS指令使結(jié)果集以子元素的形式出現(xiàn).

/*
結(jié)果:
    
      1
      aaaa
    
    
      2
      bbbb
    
    
      3
      dddd
    
    
      4
    
*/select * from base for xml raw,elements;

我們注意到這個例句中沒有將id為4的body顯示出現(xiàn).

原因是因為,在使用elements指令時,如果沒有指定后面的命令,則默認(rèn)使用abscent,此時不會為null值創(chuàng)建任何元素.

在下面的例句中通過使用elements xsinil可使null值顯示在xml中.

B.同時指定elements指令和xsinil指令以生產(chǎn)null列值的元素

/*
結(jié)果:
    
      1
      aaaa
    
    
      2
      bbbb
    
    
      3
      dddd
    
    
      4
      
    
*/select * from base for xml raw,elements xsinil;

對于每條數(shù)據(jù)都是以元素顯示會讓人看起來很不舒服,如何修改元素名稱為其他名稱呢.

C.重命名元素

/*
結(jié)果:
    
      1
      aaaa
    
    
      2
      bbbb
    
    
      3
      dddd
    
    
      4
      
    
*/select * from base for xml raw('baseinfo'),elements xsinil;

我們都知道,每個xml文件都有一個根元素,我們?nèi)绾螢檫@段xml文本加上它的根元素呢.

D.為for xml生成的xml指定根元素

可使用root指定,root指令的默認(rèn)根元素為

/*
結(jié)果:
    
      
        1
        aaaa
      
      
        2
        bbbb
      
      
        3
        dddd
      
      
        4
        
      
    
*/select * from base for xml raw('baseinfo'),root('base'),elements xsinil;

目前看起來,生成的xml結(jié)果似乎很不錯,但是,如果我們想要將數(shù)據(jù)庫中的body列改成xml的元素,該如何修改呢?

E.修改元素名

/*
結(jié)果:
    
      
        1
        aaaa
      
      
        2
        bbbb
      
      
        3
        dddd
      
      
        4
        
      
    
*/select id,body data from base for xml raw('baseinfo'),root('base'),elements xsinil;

現(xiàn)在的結(jié)果,基本上符合一個xml的基本格式,那么,我們設(shè)想,如果不給id,body指定列名,也不指定根元素名,也不指定元素名,那會出現(xiàn)什么記過呢?

/*
結(jié)果:
    1aaaa2bbbb3dddd4
*/
--因為id為int類型,為使id不出現(xiàn)列名,我們使id+0
--因為body為nvarchar類型,為使body不出現(xiàn)列名,我們使body+''select id+0,body+'' from base for xml raw(''), elements;

但是,對上面的結(jié)果,我們似乎無法分清楚每條數(shù)據(jù),而且id為4的空值也沒有顯示出來,如何進(jìn)行修改呢?見下句.

/*
結(jié)果:
    1,aaaa;2,bbbb;3,dddd;4,null;
*/select id+0,',',isnull(body,'null')+'',';' from base for xml raw(''),elements;

如此以來,似乎看到了沒有列名給我們帶的好處.其實上句還可以再修改些.

/*
結(jié)果:
    1,aaaa;2,bbbb;3,dddd;4,null;
*/select convert(nvarchar,id)+','+isnull(body,'null')+';' from base for xml raw(''),elements;

我們再來修改,讓讓結(jié)果以另一種方式出現(xiàn).

/*
結(jié)果:
    {1,aaaa}{2,bbbb}{3,dddd}{4,null}
*/select '{'+convert(nvarchar,id)+','+isnull(body,'null')+'}' from base for xml raw(''),elements;

現(xiàn)在可以看到,我們可以根據(jù)自己的需要進(jìn)行組合,生成我們需要的結(jié)果.

在SQLServer2005中,已經(jīng)支持了xml數(shù)據(jù)類型,因此,可以通過編寫TYPE指令,將FOR XML查詢的結(jié)果以xml數(shù)據(jù)類型進(jìn)行返回,舉例如下:

declare @string nvarchar(1000)declare @xml xml/*
    消息257,級別16,狀態(tài)3,第8行
    不允許從數(shù)據(jù)類型xml到nvarchar的隱式轉(zhuǎn)換。請使用CONVERT函數(shù)來運(yùn)行此查詢。
*/
--set @string=(select id,body from base for xml raw,type)set @xml=(select id,body from base for xml raw,type)

最后,以一個常用的例子來介紹for xml raw模式的應(yīng)用.

建學(xué)生表student,表結(jié)構(gòu)如下:

列名數(shù)據(jù)類型允許空
sidint允許
namenvarchar(50)允許

插入表數(shù)據(jù)如下:

idname
1張三
2李四
3王五

建課程表sclass,表結(jié)構(gòu)如下:

列名數(shù)據(jù)類型允許空
cidint允許
namenvarchar(50)允許

插入表數(shù)據(jù)如下:

idname
1語文
2數(shù)學(xué)
3英語

建student_class表,表結(jié)構(gòu)如下:

列名數(shù)據(jù)類型允許空
sidint
cidint

插入數(shù)據(jù)如下:

cidsid
11
12
13
21
32
33

至此,數(shù)據(jù)結(jié)果是:

姓名課程
張三語文
張三數(shù)學(xué)
張三英語
李四語文
王五數(shù)學(xué)
王五英語

我們需要最后的結(jié)果形式如下:

姓名課程
張三語文,數(shù)學(xué),英語
李四語文
王五數(shù)學(xué),英語

該如何實現(xiàn)呢?

/*
結(jié)果:
    張三    語文,數(shù)學(xué),英語
    李四    語文
    王五    數(shù)學(xué),英語
*/select [name],            
stuff(
(                    
select ','+[name]                    
from sclass                    
where cid in (                                    
select cid                                    
from student_class                                    
where student.sid=student_class.sid                                
)                    
for xml raw(''),elements                
),            
1,1,'') sclassfrom student

以上是“FOR XML中RAW模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文題目:FORXML中RAW模式的示例分析
本文URL:http://weahome.cn/article/pipggi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部