千家信息网

FOR XML中RAW模式的示例分析

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍FOR XML中RAW模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!描述:raw模式将查询结果集中的每一行转换为带有元素名称的xml元素,将每一行
千家信息网最后更新 2026年11月04日FOR XML中RAW模式的示例分析

这篇文章主要介绍FOR XML中RAW模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

描述:

raw模式将查询结果集中的每一行转换为带有元素名称的xml元素,将每一行的列转换为row的属性.

可以通过编写嵌套FOR XML查询来生成XML层次结构

在默认情况下,所有非null值都将被映射为元素的属性.

如果需要将查询结果集中数据转换为元素的子元素,需要使用elements指令.

语法:

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

具体参见例子:

建表Base,表结构如下:

列名数据类型允许空
idint允许
bodynvarchar(50)允许

插入表数据如下:

idbody
1aaaa
2bbbb
3cccc
4

例句:

A.返回查询数据的信息,使用for xml raw 模式

/*结果:                */select * from base for xml raw;

通过指定ELEMENTS指令使结果集以子元素的形式出现.

/*结果:          1      aaaa              2      bbbb              3      dddd              4    */select * from base for xml raw,elements;

我们注意到这个例句中没有将id为4的body显示出现.

原因是因为,在使用elements指令时,如果没有指定后面的命令,则默认使用abscent,此时不会为null值创建任何元素.

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

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

/*结果:          1      aaaa              2      bbbb              3      dddd              4          */select * from base for xml raw,elements xsinil;

对于每条数据都是以元素显示会让人看起来很不舒服,如何修改元素名称为其他名称呢.

C.重命名元素

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

我们都知道,每个xml文件都有一个根元素,我们如何为这段xml文本加上它的根元素呢.

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

可使用root指定,root指令的默认根元素为

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

目前看起来,生成的xml结果似乎很不错,但是,如果我们想要将数据库中的body列改成xml的元素,该如何修改呢?

E.修改元素名

/*结果:                  1        aaaa                    2        bbbb                    3        dddd                    4                  */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模式的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

结果 元素 数据 类型 指令 数学 语文 英语 张三 查询 模式 结构 王五 李四 生成 例句 名称 课程 示例 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技 科技与互联网发展 广州宏创互联网科技 互联网科技的未来发展 一五八零互联网科技 科技赋能互联网健康 宁夏众和广鑫互联网科技有限公司 福建科技产业互联网发展 河南住房之家互联网科技 深圳市罗太互联网科技有限公司 互联网科技大赛获奖感言 济南有互联网科技公司吗 山东星卡互联网科技有限公司官网 四川互联网展示科技馆设计 半导体是互联网高科技吗 云鲸互联网络科技有限公司 互联网科技机房 易租星互联网科技有限公司 优雇互联网科技有限公司 互联网的黑科技实验室 中国互联网科技股 撒么互联网科技公司 央行互联网金融科技公司 广西互联网科技孵化中心 洛阳共同富裕互联网科技有限公司 上海钢联属于互联网科技股吗 互联网营销推广黑科技 四川互联网展示科技馆设计 陕西云淼互联网科技公司 河南商务圈互联网科技有限公司
0