91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FOR XML中RAW模式的示例分析

發布時間:2021-09-17 14:00:51 來源:億速云 閱讀:144 作者:小新 欄目:編程語言

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

描述:

raw模式將查詢結果集中的每一行轉換為帶有<row>元素名稱的xml元素,將每一行的列轉換為row的屬性.

可以通過編寫嵌套FOR XML查詢來生成XML層次結構

在默認情況下,所有非null值都將被映射為<row>元素的屬性.

如果需要將查詢結果集中數據轉換為<row>元素的子元素,需要使用elements指令.

語法:

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

具體參見例子:

建表Base,表結構如下:

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

插入表數據如下:

idbody
1aaaa
2bbbb
3cccc
4

例句:

A.返回查詢數據的信息,使用for xml raw 模式

/*
結果:
    <row id="1" body="aaaa" />
    <row id="2" body="bbbb" />
    <row id="3" body="dddd" />
    <row id="4" />
*/select * from base for xml raw;

通過指定ELEMENTS指令使結果集以子元素的形式出現.

/*
結果:
    <row>
      <id>1</id>
      <body>aaaa</body>
    </row>
    <row>
      <id>2</id>
      <body>bbbb</body>
    </row>
    <row>
      <id>3</id>
      <body>dddd</body>
    </row>
    <row>
      <id>4</id>
    </row>
*/select * from base for xml raw,elements;

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

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

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

B.同時指定elements指令和xsinil指令以生產null列值的元素

/*
結果:
    <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>1</id>
      <body>aaaa</body>
    </row>
    <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>2</id>
      <body>bbbb</body>
    </row>
    <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>3</id>
      <body>dddd</body>
    </row>
    <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>4</id>
      <body xsi:nil="true" />
    </row>
*/select * from base for xml raw,elements xsinil;

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

C.重命名<row>元素

/*
結果:
    <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>1</id>
      <body>aaaa</body>
    </baseinfo>
    <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>2</id>
      <body>bbbb</body>
    </baseinfo>
    <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>3</id>
      <body>dddd</body>
    </baseinfo>
    <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <id>4</id>
      <body xsi:nil="true" />
    </baseinfo>
*/select * from base for xml raw('baseinfo'),elements xsinil;

我們都知道,每個xml文件都有一個根元素,我們如何為這段xml文本加上它的根元素呢.

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

可使用root指定,root指令的默認根元素為<root>

/*
結果:
    <base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <baseinfo>
        <id>1</id>
        <body>aaaa</body>
      </baseinfo>
      <baseinfo>
        <id>2</id>
        <body>bbbb</body>
      </baseinfo>
      <baseinfo>
        <id>3</id>
        <body>dddd</body>
      </baseinfo>
      <baseinfo>
        <id>4</id>
        <body xsi:nil="true" />
      </baseinfo>
    </base>
*/select * from base for xml raw('baseinfo'),root('base'),elements xsinil;

目前看起來,生成的xml結果似乎很不錯,但是,如果我們想要將數據庫中的body列改成xml的<data>元素,該如何修改呢?

E.修改元素名

/*
結果:
    <base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <baseinfo>
        <id>1</id>
        <data>aaaa</data>
      </baseinfo>
      <baseinfo>
        <id>2</id>
        <data>bbbb</data>
      </baseinfo>
      <baseinfo>
        <id>3</id>
        <data>dddd</data>
      </baseinfo>
      <baseinfo>
        <id>4</id>
        <data xsi:nil="true" />
      </baseinfo>
    </base>
*/select id,body data from base for xml raw('baseinfo'),root('base'),elements xsinil;

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

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

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

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

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

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

我們再來修改,讓讓結果以另一種方式出現.

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

現在可以看到,我們可以根據自己的需要進行組合,生成我們需要的結果.

在SQLServer2005中,已經支持了xml數據類型,因此,可以通過編寫TYPE指令,將FOR XML查詢的結果以xml數據類型進行返回,舉例如下:

declare @string nvarchar(1000)declare @xml xml/*
    消息257,級別16,狀態3,第8行
    不允許從數據類型xml到nvarchar的隱式轉換。請使用CONVERT函數來運行此查詢。
*/
--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模式的應用.

建學生表student,表結構如下:

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

插入表數據如下:

idname
1張三
2李四
3王五

建課程表sclass,表結構如下:

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

插入表數據如下:

idname
1語文
2數學
3英語

建student_class表,表結構如下:

列名數據類型允許空
sidint
cidint

插入數據如下:

cidsid
11
12
13
21
32
33

至此,數據結果是:

姓名課程
張三語文
張三數學
張三英語
李四語文
王五數學
王五英語

我們需要最后的結果形式如下:

姓名課程
張三語文,數學,英語
李四語文
王五數學,英語

該如何實現呢?

/*
結果:
    張三    語文,數學,英語
    李四    語文
    王五    數學,英語
*/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模式的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德庆县| 新河县| 东城区| 桑日县| 黑龙江省| 邢台市| 布尔津县| 临桂县| 钦州市| 尉犁县| 旬邑县| 嘉黎县| 垦利县| 正蓝旗| 郓城县| 兴仁县| 鹿泉市| 三明市| 灌阳县| 林周县| 财经| 宽甸| 新竹市| 河曲县| 工布江达县| 广汉市| 新安县| 武夷山市| 襄城县| 泗水县| 南靖县| 江都市| 黄浦区| 天水市| 福海县| 韩城市| 长兴县| 屏边| 怀集县| 昌江| 金寨县|