У меня есть таблица с полем XML.Типичный XML-файл, который он содержит:
<things>
<Fruit>
<imageId>39</imageId>
<title>Apple</title>
</Fruit>
<Fruit>
<imageId>55</imageId>
<title>Pear</title>
</Fruit>
<Fruit>
<imageId>76</imageId>
<title>Grape</title>
</Fruit>
</things>
В моей таблице содержится около 50 строк, меня интересуют только два поля: omId (первичный ключ int) и omText (мои данные xml).
То, что я пытаюсь достичь, это способ сказать, по всем данным XML во всей таблице ... дать мне все элементы xmlElements, гденазвание X. Или подскажите все элементы, которые используют imageId 55.
Я использую функции типа данных VALUE и QUERY для получения данных.
select omID,
omText.query('/things/Fruit')
,cast('<results>' + cast(omText.query('/things/Fruit') as varchar(max)) + '</results>' as xml) as Value
from dbo.myTable
where omText.value('(/things/Fruit/imageId)[1]', 'int') = 76
Который работает только тогда, когда идентификатор, который я ищу, является первым в документе.Кажется, он не ищет весь XML.
По сути, набор результатов возвращается с одной строкой для каждой записи в ТАБЛИЦЕ, тогда как я думаю, что мне нужно иметь одну строку для каждого совпадающего ЭЛЕМЕНТА ... Не совсем уверен, как начать писать группу дляtho.
Я начинаю чувствовать, что я делаю это сложнее, чем нужно ... мысли и идеи, пожалуйста.