當前位置:妙知谷 >

遊戲數碼 >電腦 >

SQL SERVER 如何讀取類型為XML的字段

SQL SERVER 如何讀取類型為XML的字段

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

SQL SERVER 如何讀取類型為XML的字段

(02)讀取XML字段方法有兩種,方法一:SELECTCONVERT(NVARCHAR(50),y('data(/Record/@id)')) AS [id],CONVERT(NVARCHAR(max),y('data(/Record/Exception/@type)[1]')) AS [type1],CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/Task/@address)[1]')) AS [address1],e('data(/Record/Exception/Error)[1]','varchar(max)') AS [Error1],e('data(/Record/Exception/Severity)[1]','varchar(10)') AS [Severity1],CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/@type)[2]')) AS [type2],CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/Task/@address)[2]')) AS [address2],e('data(/Record/Exception/Error)[2]','varchar(MAX)') AS [Error2],e('data(/Record/Exception/Severity)[2]','varchar(10)') AS [Severity2]FROM #XMLTab

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

SQL SERVER 如何讀取類型為XML的字段 第2張

(04)其他的用法,比如:將同一節點下的數據合併為一行,y('data(/Record/Exception/@type)[1]')  AS [type1],y('data(/Record/Exception/@type)[2]')  AS [type2],y('data(/Record/Exception/@type)'),CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/@type)')),REPLACE(CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/@type)')),' ',',')FROM #XMLTab

SQL SERVER 如何讀取類型為XML的字段 第3張

(05)測試合併結果:SELECTCONVERT(NVARCHAR(50),y('data(/Record/@id)')) AS [id],REPLACE(CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/@type)')),' ',',') AS [type],REPLACE(CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/Task/@address)')),' ',',') AS [address],REPLACE(CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/Error)')),' ',',') AS [Error],REPLACE(CONVERT(NVARCHAR(MAX),y('data(/Record/Exception/Severity)')),' ',',') AS [Severity]FROM #XMLTab

SQL SERVER 如何讀取類型為XML的字段 第4張
  • 文章版權屬於文章作者所有,轉載請註明 https://miaozhigu.com/sm/diannao/0ogx2j.html