Контекст: Я собираю некоторые описания форм XML из таблицы веб-служб в надежде использовать это имя для определения того, что пользователь ввел в качестве ответа.Так как это описание изменяется для каждого шага (строки) процесса и каждого продукта, я хочу что-то, что может динамически оценивать.
Что я пробовал: Следующее было весьма полезно, но оно возвращает динамическийрезультат запроса атрибута в своем собственном поле и использование объединения для уменьшения результатов, так как одно поле приведет к собственным сложностям: Получить значения из тегов XML с динамически заданными полями данных
Текущая попытка: Я использую следующий код для создания имени атрибута, которое я буду использовать на следующем шаге для запроса значения атрибута:
case when left([Return], 5) = '<?xml'
then lower(cast([Return] as xml).value('(/response/form/*/@name)[1]','varchar(30)'))
else ''
end as [FormRequest]
И в качестве части шага 2 я использовалфункция STUFF, чтобы попытаться сделать возможным запрос на уровне строк
case when len(FormRequest)>0
then stuff( ',' + 'cast([tmpFormResponse] as xml).value(''(/wrapper/@' + [FormRequest] + ')[1]'',''varchar(max)'')', 1, 1, '')
else ''
end as [FormResponse]
Вместо того, чтобы видеть 1, возвращенный в качестве значения моего поля FormReponse для атрибута submit (см. ниже желтый цвет), он возвращает текст запроса -cast ([tmpFormResponse] как xml) .value ('(/ wrapper / @ submit) 1 ', 'varchar (max)') - вместо этого (то, что должнобыть опрошен).![query result](https://i.stack.imgur.com/RJkH9.png)
Как мне применить метод значения, чтобы я мог динамически вырезать ответ на строку XML-данных в tmpFormResponse на основе значения поля в поле FormRequest?
Спасибо