如何将不同的XML字段值插入表列

时间:2014-10-31 07:59:29

标签: sql sql-server xml sql-server-2008

我有一个如下所述的xml,

Declare  @Message as xml

set @Message='<message>

            <body>
            <ID>1</ID>
            <setup_time>10</setup_time>
            <prod_cycle_time>10</prod_cycle_time>
            <unit>cas</unit>
            <Flag>NULL</Flag>
            <FillingPO>NULL</FillingPO>
            <PackAtCAN1>NULL</PackAtCAN1>
            </body>
            </message>'

我正在尝试使用查询

下方插入
INSERT into table(ID,Desc,Value)
  SELECT p.value('ID[1]','INT'),
         p.value('Desc[1]','NVARCHAR(50)'),
         p.value('Value[1]','NVARCHAR(40)')
  FROM  @message.nodes('/message/Body/') x(p)    

我想在格式

中插入上面的XML数据
ID     Desc              Value
1      setup_time        10
1      prod_cycle_time   10
1      unit              Case
1      Flag              NULL
1      FillingPO         NULL
1      PackAtCAN1        NULL

但我只能插入一条记录

1 个答案:

答案 0 :(得分:1)

您需要进行一些更改,第一个是在节点函数中添加body/之后的通配符,以确保返回所有节点。然后在选择value('.', ...)以获取值,并local-name获取元素名称,以便您的查询最终结果如下:

  SELECT p.value('../../ID[1]','INT'),
         p.value('local-name(.)','NVARCHAR(50)'),
         p.value('.','NVARCHAR(40)')
  FROM  @message.nodes('/message/body/*') x(p)