Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server脚本将xml属性和文本值转换为表_Sql_Sql Server_Xml - Fatal编程技术网

SQL Server脚本将xml属性和文本值转换为表

SQL Server脚本将xml属性和文本值转换为表,sql,sql-server,xml,Sql,Sql Server,Xml,我有一个包含4列的testA表,列dvu数据是一个xml字符串 种皮 表testA有数百行 感谢您宝贵的输入。您可以使用XML来派生列名/值并分析结果。例如: DECLARE @TestA TABLE (ID INT, X INT, Y INT, Dv_Data XML); INSERT @TestA VALUES (101, 4, 5, '<U><V N="TTF">1</V><V N="MF">0</V><V N="Resu

我有一个包含4列的testA表,列dvu数据是一个xml字符串

种皮

表testA有数百行


感谢您宝贵的输入。

您可以使用XML来派生列名/值并分析结果。例如:

DECLARE @TestA TABLE (ID INT, X INT, Y INT, Dv_Data XML);
INSERT @TestA VALUES 
(101, 4, 5, '<U><V N="TTF">1</V><V N="MF">0</V><V N="ResultA">383.501</V></U>'),
(102, 4, 6, '<U><V N="TTF">0</V><V N="MF">1</V><V N="ResultA">383.601</V></U>');

SELECT *
FROM
(
    SELECT T.ID,
           T.X, 
           T.Y, 
           ColName = A.B.value('@N', 'VARCHAR(MAX)'), 
           ColVal = A.B.value('text()[1]', 'VARCHAR(MAX)')
    FROM @TestA AS T
    CROSS APPLY T.Dv_Data.nodes('U/V') AS A(B)
) AS T
PIVOT
(
    MAX(ColVal) FOR ColName IN ([TTF], [MF], [ResultA])
) AS P;
ID  X  Y  TTF  MF  ResultA
---------------------------
101 4  5  1    0   383.501
102 4  6  0    1   383.601
DECLARE @TestA TABLE (ID INT, X INT, Y INT, Dv_Data XML);
INSERT @TestA VALUES 
(101, 4, 5, '<U><V N="TTF">1</V><V N="MF">0</V><V N="ResultA">383.501</V></U>'),
(102, 4, 6, '<U><V N="TTF">0</V><V N="MF">1</V><V N="ResultA">383.601</V></U>');

SELECT *
FROM
(
    SELECT T.ID,
           T.X, 
           T.Y, 
           ColName = A.B.value('@N', 'VARCHAR(MAX)'), 
           ColVal = A.B.value('text()[1]', 'VARCHAR(MAX)')
    FROM @TestA AS T
    CROSS APPLY T.Dv_Data.nodes('U/V') AS A(B)
) AS T
PIVOT
(
    MAX(ColVal) FOR ColName IN ([TTF], [MF], [ResultA])
) AS P;