SQLServer 读取XML类型的节点数据
发布时间:2020-12-12 12:43:20 所属栏目:MsSql教程 来源:网络整理
导读:--测试数据--DROP TABLE #XMLTabCREATE TABLE #XMLTab(colxml XML)INSERT INTO #XMLTab SELECT N'Record id="1629" Exception type="RING_BUFFER_EXCEPTION" Task address="0x0062B8E8" / Error9003/Error Severityerror/Severity /Exception Exception type
-- 测试数据 -- DROP TABLE #XMLTab CREATE 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 /*两种方法,结果都是一样*/ --[方法一] SELECT CONVERT(NVARCHAR(50),colxml.query('data(/Record/@id)')) AS [id],CONVERT(NVARCHAR(MAX),colxml.query('data(/Record/Exception/@type)[1]')) AS [type1],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],colxml.query('data(/Record/Exception/@type)[2]')) AS [type2],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 --[方法二] SELECT node.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) -- 其他特性 -- 将同一节点下的数据合并为一行 SELECT colxml.query('data(/Record/Exception/@type)[1]') AS [type1],colxml.query('data(/Record/Exception/@type)[2]') AS [type2],colxml.query('data(/Record/Exception/@type)'),colxml.query('data(/Record/Exception/@type)')),REPLACE(CONVERT(NVARCHAR(MAX),' ',',') FROM #XMLTab -- 测试合并结果: SELECT CONVERT(NVARCHAR(50),') AS [type],colxml.query('data(/Record/Exception/Task/@address)')),') AS [address],colxml.query('data(/Record/Exception/Error)')),') AS [Error],colxml.query('data(/Record/Exception/Severity)')),') AS [Severity] FROM #XMLTab (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |