2014-10-31 39 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

相關問題