Запрос части столбца xml как результирующий набор - PullRequest
3 голосов
/ 29 декабря 2011

Как я могу получить только часть столбца xml и вернуть его как собственный набор результатов в SQL?

В моей базе данных есть XML-файл, который выглядит следующим образом:

<main>
  <data>
    <rows>
      <_items>
        <columns>
          <values>
            <keyvaluepairs>
              <keyvaluepairofstringstring>
                <key>EVENT</key>
                <value>Wedding</value>              
              </keyvaluepairofstringstring>
              <keyvaluepairofstringstring>
                <key>DETAIL</key>
                <value>Smith-Wesson</value>              
              </keyvaluepairofstringstring>
            </keyvaluepairs>              
          </values>
        </columns>
        <columns>
          <values>
            <keyvaluepairs>
              <keyvaluepairofstringstring>
                <key>EVENT</key>
                <value>Reunion</value>              
              </keyvaluepairofstringstring>
              <keyvaluepairofstringstring>
                <key>DETAIL</key>
                <value>Class of 1996</value>              
              </keyvaluepairofstringstring>
            </keyvaluepairs>
          </values>
        </columns>
        <columns>
          <values>
            <keyvaluepairs>
              <keyvaluepairofstringstring>
                <key>EVENT</key>
                <value>Pie-throwing contest</value>              
              </keyvaluepairofstringstring>
              <keyvaluepairofstringstring>
                <key>DETAIL</key>
                <value>Cherry pies</value>              
              </keyvaluepairofstringstring>
            </keyvaluepairs>              
          </values>
        </columns>
      </_items>
    </rows>
  </data>
</main>

И я хочу вернуть «строки» в результирующем наборе следующим образом:

EVENT                   NAME
Wedding                 Smith-Wesson
Reunion                 Class of 1996
Pie-throwing contest    Cherry pies
...etc...

Я использую метод , описанный здесь , для запроса отдельных значений, но этого недостаточно для получения всех данных, которые мне действительно нужны.

Я использую SQL Server 2008.

Редактировать: чтобы уточнить, этот xml содержится в одной строке. Например, чтобы вернуть вышеупомянутый xml, я бы набрал

select my_xml_column from my_table;

1 Ответ

2 голосов
/ 29 декабря 2011

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

select X.N.value('(keyvaluepairofstringstring/value[../key = "EVENT"])[1]', 'varchar(100)') as EVENT,
       X.N.value('(keyvaluepairofstringstring/value[../key = "DETAIL"])[1]', 'varchar(100)') as NAME
from YourTable as T
  cross apply T.XMLCol.nodes('/main/data/rows/_items/columns/values/keyvaluepairs') as X(N)

Тест здесь: http://data.stackexchange.com/stackoverflow/q/122873/

Кстати, мне пришлось исправить ваш XML. Там, где некоторые пропущенные конечные теги

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...