Мне нужна дополнительная помощь с другим XML-запросом. Ниже приведен пример записи моего столбца XML:SQL Server 2008 XML Query
<Fields>
<MappedFields>
<Field name="FormNumber" value="21" />
<Field name="ProcedureCode" value="T2023" />
<Field name="CurrentDate" value="4/23/2012" />
</MappedFields>
</Fields>
Элементы поля могут появляться в любом порядке, так что он может выглядеть так, как хорошо:
<Fields>
<MappedFields>
<Field name="ProcedureCode" value="G5532" />
<Field name="FormNumber" value="12" />
<Field name="CurrentDate" value="3/29/2011" />
</MappedFields>
</Fields>
Что я ищу, это запрос, который получит значение поля с именем «FormNumber» для всех записей в таблице. Следующий ниже запрос работает, если поле с именем «FormNumber» является первым элементом поля в XML. Мне нужен запрос, который найдет элемент Field, даже если он не является первым элементом. Может ли кто-нибудь помочь мне с этим?
SELECT
X.Node.value(N'(Field/@value)[1]', 'nvarchar(max)') AS FormNumber
FROM
dbo.MHTCM_LetterSent A
CROSS APPLY A.LetterXML.nodes(N'/Fields/MappedFields') AS X(Node)
WHERE
X.Node.value(N'(Field/@name)[1]', 'nvarchar(max)') = 'FormNumber'
Это хорошая информация для заметок. Тем не менее, он все еще только выбирает элемент Field, если он первый. Я бы хотел, чтобы он выбирал его, если он в любом порядке. –
Я бы ожидал, что он выберет первый элемент Field, где name = "FormNumber", даже если это не первое поле. См. Edit for take 2. – Andrew
Nice! Это решило проблему для меня! Благодаря! –