AmplitudeXYZ Ответов: 2

Как запросить таблицу с XML-столбцом, чтобы получить строки на основе значений столбцов


У меня есть таблица с XML-столбцом под названием Vehicle.

XML выглядит следующим образом:

<vehicle>
 <sedan>
  <type color="red" make="honda" year="2019">
   <dealers>
    <dealer address="1234 Cat Drive">
    <dealer address="1944 Dog Drive">
   </dealers>
  </type>
 </sedan>
</vehicle>


Например, я хочу выбрать строку на основе значения адреса:
Как выбрать все данные из XML, где адрес равен
1234 Cat Drive


Что я уже пробовал:

До сих пор я пытался использовать метод запроса.
Но должен быть лучший способ, я также вижу много веб-примеров, но ничего конкретного о том, как я могу получить строку, передавая значение.

SELECT Vehicles.query('/vehicles/sedan/type/dealers/dealer[@address="1944 Dog Drive"]')

2 Ответов

Рейтинг:
7

Richard Deeming

Если вы просто хотите выбрать строки из таблицы, где этот адрес существует в столбце XML:

DECLARE @AddressToFind nvarchar(100) = N'1234 Cat Drive';

SELECT
    Vehicle,
    OtherColumns
FROM
    YourTable
WHERE
    Vehicle.exist('//dealer[@address = sql:variable("@AddressToFind")]') = 1
;
метод exist () (тип данных xml) - SQL Server | Microsoft Docs[^]
Привязка реляционных данных внутри XML - данных- SQL Server | Microsoft Docs[^]

Если вы хотите вернуть части XML-документа, вы можете использовать query или nodes чтобы уничтожить документ.

метод query () (тип данных xml) - SQL Server | Microsoft Docs[^]
метод nodes () (тип данных xml) - SQL Server | Microsoft Docs[^]