2014-10-31 41 views
0

我有一个XML如下所述,如何插入不同的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

您需要进行一些更改,第一种是在节点功能中添加通配符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)  
+0

上面的语句工作,如果标签是标签上面。但是,如果标签位于标签内,那么同样的事情就不起作用。组@消息= ' 10 CAS NULL NULL NULL ' – user3237193 2014-10-31 11:33:50

+0

如果' ID'在身体标签中,那么你只需要c在你正在寻找它的地方 - 例如'p.value('ID [1]','INT')' – GarethD 2014-10-31 11:39:49

+0

上面的语句是以表格格式返回所有的xml标签和它的值。但是,如果我需要几个提交值的话,那么如何执行“setup_time,prod_cycle_time,unit”等字段以及它的值。 – user3237193 2014-10-31 13:16:16

相关问题