Я пытаюсь извлечь метаданные из XML из базы данных сервера отчетов SQL Server. Мой текущий запрос приведен ниже:Как извлечь несколько значений из столбца XML, используя функцию, аналогичную функции value()?
SELECT
a.Name as 'ReportName'
,a.ReportXML
,Parameter = x.value('(Parameter/Name)[1]','VARCHAR(250)')
FROM (SELECT C.Name,c.itemID,CONVERT(XML,CONVERT(VARCHAR(MAX),C.Parameter)) AS reportXML
FROM ReportServer.dbo.Catalog C
WHERE C.Content is not null
and c.Type = 2 -- Report only
) a
cross apply reportXML.nodes('/Parameters') r (x)
WHERE 1=1
and name ='ReportName'
Моя цель - вернуть все параметры, связанные с отчетом. Метод x.value вернет только 1 значение. (В настоящее время он возвращает первый параметр отчета, потому что 1 жестко закодирован в строковом литерале.) Я знаю, что есть 5 параметров для отчета, на который я смотрю.
Есть ли другая функция с похожим синтаксисом, которая позволит мне вернуть все значения? Или есть шаблон, который я могу использовать вместо номера? Я пробовал несколько функций на msdn без везения.
Спасибо! Ваше решение сработало, и вы также правильно указали, что C.Parameter является NTEXT. Из-за этого я преобразовал в varchar (max), а затем в XML. Не возражаете ли вы предоставить мне возможность изменить это из NTEXT или указать мне на какую-то документацию. – SQLUser44
@ SQLUser44, [Read this] (https://msdn.microsoft.com/en-us/library/ms187993.aspx). NTEXT, TEXT и IMAGE, где уже установлен * устарел * с SQL Server 2000 (!). Microsoft завершит поддержку в одной из следующих версий. Сегодня мы используем 'NVARCHAR (MAX)', 'VARCHAR (MAX)' и 'VARBINARY (MAX)'. В вашем конкретном случае вы должны использовать тип данных 'XML'. Это будет 1) гарантировать действительный контент и 2) ускорить ваши запросы, так как вам не придется выполнять дорогостоящие трансляции больших типов. Btw: Thx для принятия. Было бы неплохо проголосовать за меня, THX! – Shnugo