выбор из sql

#sql #xml

#sql #xml

Вопрос:

 <suggestions>
 <suggestion>
  <description>plate.</description> 
 </suggestion>
 <suggestion>
 <description>snack.</description> 
 </suggestion>
</suggestions>

DECLARE @Suggestions TABLE (
     [Description] VARCHAR(800)
   )
  

У меня есть вышеуказанный xml в переменной типа XML в моей хранимой процедуре
как я могу вставить каждый текст между тегами описания
в таблицу @Предложения

Ответ №1:

Попробуйте это:

 DECLARE @input XML = '<suggestions>
 <suggestion>
  <description>plate.</description> 
 </suggestion>
 <suggestion>
 <description>snack.</description> 
 </suggestion>
</suggestions>'

DECLARE @Suggestions TABLE ([Description] VARCHAR(800))

INSERT INTO @Suggestions
    SELECT
        Sugg.value('(description)[1]', 'varchar(800)')
    FROM
        @input.nodes('/suggestions/suggestion') AS Tbl(Sugg)

SELECT * FROM @Suggestions
  

@input.nodes() Выражение в основном превращает каждый <suggestion> узел в строку в вызываемой «псевдо» таблице Tbl(Sugg) . Затем из этих «строк» (каждая в основном представляет собой еще один фрагмент XML) вы выбираете значение, которое вас интересует — здесь содержимое <description> XML-элемента внутри этого XML-фрагмента.

Комментарии:

1. 1 Я собирался опубликовать аналогичный ответ… затем зазвонил телефон 🙂

Ответ №2:

Вы можете использовать LINQ-to-XML для получения всех предложений, затем вы можете вставить эти данные в таблицу.