sql - MS SQL 2008 - 如何将 xml 值转换为 ms sql 表中的行集合?

标签 sql sql-server-2008 sql-server-2005

我的 MS SQL 表列中有一个名为“XDATA”的值,如下所示:

<root><KV><Key>1</Key><Value>A</Value></KV>
    <KV><Key>2</Key><Value>B</Value></KV>
    <KV><Key>3</Key><Value>C</Value></KV></root>

我希望能够像这样取回行的值:

KEY, VALUE
1,A
2,B
3,C

到目前为止我已经写了这个:

DECLARE @a1  xml
    declare @x xml;
    set @x = '<root><KV><Key>1</Key><Value>A</Value></KV>
        <KV><Key>2</Key><Value>B</Value></KV>
        <KV><Key>3</Key><Value>C</Value></KV></root>';
   SELECT @a1 = @x.query('(/root/KV/Key/text())')
   select @a1

但是我得到了 123。不是三行两列。如何返回三行,每行有两列:

KEY, VALUE
    1,A
    2,B
    3,C

谢谢

最佳答案

使用nodes()将 XML 分解成行并使用 value()获得一个值。

select 
  T.N.value('Key[1]', 'int') as [Key],
  T.N.value('Value[1]', 'varchar(10)') as Value
from @x.nodes('/root/KV') as T(N)

关于sql - MS SQL 2008 - 如何将 xml 值转换为 ms sql 表中的行集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910135/

相关文章:

sql - 尝试使用 SQL 查询获取公共(public)交通的直接、间接、相交路线

SQL - 在连接表上查询

sql - 获取查询结果的平均值

SQL 服务器选择

ajax - VS 2008/AJAX 项目在压力下失败

sql - 获取每组的前 1 行

mysql - 选择与具有特定值的其他行关联的行

sql - Postgresql 从多个表中删除多行

string - 在SQL Server 2005中的表列上进行修剪

java - 从结果集中获取不同的值