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

Выше заявление работает, если тег выше тега. Но то же самое не работает, если тег находится внутри тега . набор @ Message = ' 10 саз NULL NULL NULL ' – user3237193

+0

Если ' ID' находится в теге тела, тогда вам просто нужно c укажите, где вы его ищете - например, 'p.value ('ID [1]', 'INT')' – GarethD

+0

Выше инструкция возвращает все теги xml и ее значения в формате таблицы. Но если мне нужно немного подавать значения, то как делать .xml-поля, такие как поля «setup_time, prod_cycle_time, unit» и его значения. – user3237193

Смежные вопросы