Запрос данных XML, хранящихся в столбце SQL Server

Моя таблица - XMLData со столбцом XMLXMLField.

Данные в столбце выглядят так:

<table>
  <id>{9ebef1ed-51f6-4160-b342-40fd1bf311c5}</id>
  <rows>
    <row>
      <columns>
        <column name = "Batch" value = "Test Batch 123" type = "System.String" />
        <column name = "PartNo" value = "Sample123" type = "System.String" />
        <column name = "Note" value = "Slight Color Variants" type = "System.String" />
        <column name = "ShipDate" value = "05-August-2018" type = "System.DateTime" />
        <column name = "Qty" value = "2" type = "System.Int32" />
        <column name = "DefaultKey" value = "1" type = "System.Int32" />
      </columns>
    </row>
    <row>
      <columns>
        <column name = "Batch" value = "Second Batch" type = "System.String" />
        <column name = "PartNo" value = "SampleXyz" type = "System.String" />
        <column name = "Note" value = "Release Date TBD" type = "System.String" />
        <column name = "ShipDate" value = "01-September-2018" type = "System.DateTime" />
        <column name = "Qty" value = "1" type = "System.Int32" />
        <column name = "DefaultKey" value = "2" type = "System.Int32" />
      </columns>
    </row>
  </rows>
  <key>DefaultKey</key>
  <total>0</total>
  <data />
  <parameters />
</table>

Я хотел бы запросить Batch, PartNo, Note, ShipDate, Qty, DefaultKey и получить значения.

Спасибо

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
518
1

Ответы 1

Попробуйте что-то вроде этого:

SELECT
    Batch = XC.value('(column[@name = "Batch"]/@value)[1]', 'varchar(50)'),
    PartNo = XC.value('(column[@name = "PartNo"]/@value)[1]', 'varchar(50)'),
    Note = XC.value('(column[@name = "Note"]/@value)[1]', 'varchar(50)'),
    ShipDate = XC.value('(column[@name = "ShipDate"]/@value)[1]', 'varchar(50)'),
    Qty = XC.value('(column[@name = "Qty"]/@value)[1]', 'int'),
    DefaultKey = XC.value('(column[@name = "DefaultKey"]/@value)[1]', 'int')
FROM
    dbo.XmlData
CROSS APPLY
    XmlField.nodes('/table/rows/row/columns') AS XT(XC)

Он в основном принимает XML столбца XmlField и получает «виртуальную» таблицу фрагментов XML в соответствии с XPath в выражении .nodes(). Оттуда он обращается к тем возвращенным фрагментам XML и извлекает отдельные значения, которые вам интересны.

Сработало отлично. Спасибо.

PELASyS 08.08.2018 22:48

@PELASyS: если этот ответ помог вам решить вашу проблему, пожалуйста, прими этот ответ. Это покажет вашу признательность людям, которые потратили свое время, чтобы помочь вам.

marc_s 08.08.2018 23:01

Другие вопросы по теме