当前位置:首页 > 分享 > 正文内容

SQL SERVER 如何读取类型为XML的字段

访客4年前 (2022-09-18)分享85

SQL SERVER 读取XML类型字段的方式。

操作方法

  • 01

    先创建一个测试的临时表:--    测试数据--    DROP TABLE #XMLTabCREATE TABLE #XMLTab(colxml XML)INSERT INTO #XMLTab SELECT N'<Record id="1629">  <Exception type="RING_BUFFER_EXCEPTION">    <Task address="0x0062B8E8" />    <Error>9003</Error>    <Severity>error</Severity>  </Exception>  <Exception type="BUFFER_EXCEPTION">    <Task address="0xC452BB39" />    <Error>8008</Error>    <Severity>true</Severity>  </Exception></Record>'INSERT INTO #XMLTab SELECT N'<Record id="1611">  <Exception type="RING_BUFFER_EXCEPTION">    <Task address="" />    <Error>7803</Error>    <Severity>false</Severity>  </Exception>  <Exception type="BUFFER">    <Task address="0xC4445674" />    <Error>4300</Error>    <Severity>right</Severity>  </Exception></Record>'SELECT colxml FROM #XMLTab

  • 02

    读取XML字段方法有两种,方法一:SELECTCONVERT(NVARCHAR(50),colxml.query('data(/Record/@id)')) AS [id],CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/@type)[1]')) AS [type1],CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/Task/@address)[1]')) AS [address1],colxml.value('data(/Record/Exception/Error)[1]','varchar(max)') AS [Error1],colxml.value('data(/Record/Exception/Severity)[1]','varchar(10)') AS [Severity1],CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/@type)[2]')) AS [type2],CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/Task/@address)[2]')) AS [address2],colxml.value('data(/Record/Exception/Error)[2]','varchar(MAX)') AS [Error2],colxml.value('data(/Record/Exception/Severity)[2]','varchar(10)') AS [Severity2]FROM #XMLTab

  • 03

    方法二:SELECTnode.c1.value('(@id)[1]','VARCHAR(50)') AS [id],node.c1.value('(Exception/@type)[1]','VARCHAR(50)') AS [type1],node.c1.value('(Exception/Task/@address)[1]','VARCHAR(50)') AS [address1],node.c1.value('(Exception/Error)[1]','VARCHAR(max)') AS [Error1],node.c1.value('(Exception/Severity)[1]','VARCHAR(max)') AS [Severity1],node.c1.value('(Exception/@type)[2]','VARCHAR(50)') AS [type2],node.c1.value('(Exception/Task/@address)[2]','VARCHAR(50)') AS [address2],node.c1.value('(Exception/Error)[2]','VARCHAR(max)') AS [Error2],node.c1.value('(Exception/Severity)[2]','VARCHAR(max)') AS [Severity2]FROM #XMLTab CROSS APPLY colxml.nodes('/Record') as node(c1)两种方法都可以得到下面的效果:

  • 04

    其他的用法,比如:将同一节点下的数据合并为一行,SELECTcolxml.query('data(/Record/Exception/@type)[1]')  AS [type1],colxml.query('data(/Record/Exception/@type)[2]')  AS [type2],colxml.query('data(/Record/Exception/@type)'),CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/@type)')),REPLACE(CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/@type)')),' ',',')FROM #XMLTab

  • 05

    测试合并结果:SELECTCONVERT(NVARCHAR(50),colxml.query('data(/Record/@id)')) AS [id],REPLACE(CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/@type)')),' ',',') AS [type],REPLACE(CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/Task/@address)')),' ',',') AS [address],REPLACE(CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/Error)')),' ',',') AS [Error],REPLACE(CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/Severity)')),' ',',') AS [Severity]FROM #XMLTab

扫描二维码推送至手机访问。

版权声明:本文由冒牌码农发布,如需转载请注明出处。

本文链接:http://www.xxbyc.cn/post/6423.html

分享给朋友:

“SQL SERVER 如何读取类型为XML的字段” 的相关文章

怎样清蒸小鲍鱼

怎样清蒸小鲍鱼

最近一直忙着过节的准备其实我家没啥准备主要是采购年货包括坚果、对联、贴画啥的坚果、孩子的玩具、小吃等周末给公婆寄过去了过节前的任务就完成得差不多了嘿嘿~又去了一趟回龙观批发市场这次买了小鲍鱼回来做了吃好吃得紧,老公说下周还去买哇哈哈~我说下...

qq飞车怎么侧身漂移

qq飞车怎么侧身漂移

qq飞车以前是很火的一款游戏,现在也有很多人玩,现在小编就教大家怎么侧身漂移,不容易,但是学会了非常简单。操作方法01侧身漂移:就是使漂移的轨迹向外侧移动,从而避免了与赛道的碰撞。方法:漂移的时候一般只是按一个方向的键,侧身漂移要左右一起按...

如何练就好声音

如何练就好声音

我们大多数人都觉得说话是一件很简单的事情,但其实想要铿锵有力的表达出自己内心的想法却没那么简单。并且很难实现,那今天就让我给大家介绍介绍如何练就好声音吧。操作方法01学会说话的时候运用自己的气。气沉丹田,这样我们才能让自己说话的声音变得更有...

来例假同房后怎么补救

来例假同房后怎么补救

来例假时是应该严格禁止同房的,如果同房了,事后一定要采取措施进行补救,那么,来例假同房后怎么补救呢?操作方法01吃点消炎药来例假的时候同房很容易会导致细菌感染,引起妇科炎症,所以如果担心的话,可以在事后吃点消炎药,预防感染,当然,也不是说来...

怎么查看支付宝账户的关联账户?

怎么查看支付宝账户的关联账户?

很多同学不知道怎么查看自己支付宝的关联账户,现在我为大家演示一遍操作方法01打开支付宝官网,输入自己的账号密码后登陆,进入支付宝后台页面。02按箭头所示,点击账户管理,进入下一页面03然后点击实名认证,如箭头所示04现在就可以看到自己名下共...

论文查重到底是怎么查的?

论文查重到底是怎么查的?

通常的查重软件基本是用于硕士和博士论文的自我检查,而我们常见的途径有知网,万方等。查重即是查重复率,就以知网为例,说说查重是怎么一回事儿?操作方法01上传到知网上论文通常是以整片的形式发表的,格式有些不同可能会造成一些影响,几十个字应该检测...