Использование SQL Server FOR XML: преобразовать тип данных результата в текст/varchar/строку?

Я борюсь с этим почти неделю и до сих пор не нашел решения -.-

Моя цель — получить XML от SQL Server, запросив оператор «FOR XML», взяв этот XML как строку/поток для пересылки в XSLT Transformer и представив результат в виде HTML.

Плохо то, что я должен использовать среду веб-сервера: IBM Domino 8.5.2, которая обычно использует базы данных Lotus Script и Lotus Notes для создания веб-сайтов.

Но теперь производительность баз данных Notes зашла в тупик, если говорить о больших базах данных, таких как статистика посещений нашего веб-сайта, которые хранят миллионы посещений в виде наборов данных. Поэтому мы решили перейти на сервер mssql2008, который может быстрее предоставлять результаты с пользовательской фильтрацией.

Мне действительно удалось установить соединение с SQL Server, отправить запрос и получить результат в виде xml. Но сейчас? :) Кажется, что SQL Server предоставляет свои результаты запроса «для xml» как своего рода собственный странный тип данных двоично-закодированных символов, которые не имеют смысла при их печати или сохранении в файл. И Lotus Script (в значительной степени VBScript), похоже, не имеет возможности обрабатывать этот тип данных xml.

Я пробовал все, что мог найти, чтобы получить результат - Lotus, встроенный в класс ODBC, LCConnection через OleDB, ADO Connection через OleDB... но каждая попытка заканчивается кучей нечитаемых данных.

Я мог бы представить веб-службу между домино и SQL Server, подготавливающую данные в виде строки для моего сценария домино, но я хотел бы избежать ненужных накладных расходов.

Можете ли вы указать в инструкции sql, какой тип данных вы хотите получить в результате xml? точно так же, как cast()/convert() для полей, но для всего результата xml? Чтобы я мог просто прочитать результат как поле text/varchar?

Спасибо, Крис


person tunefish    schedule 13.04.2011    source источник


Ответы (1)


Я знал, что делал что-то подобное раньше, и я думаю, что это то, что вам нужно:

SELECT CAST((SELECT [Columns] FROM [Tables] FOR XML PATH('')) AS VARCHAR(MAX)) AS XmlData

Это выдаст все, что вы сгенерировали в виде XML, в виде текстовых данных, которые вполне может принять Lotus Notes.

Изменить: вы можете изменить FOR XML PATH('') на FOR XML AUTO, если вам нужно создать XML в другом стиле.

person Community    schedule 14.04.2011
comment
отличный! именно то, что мне было нужно! Я уже думал о чем-то подобном и тоже пробовал, но все, что я сделал неправильно, это то, что я забыл первый дополнительный выбор: P Некоторые вещи могут быть такими простыми, большое спасибо - person tunefish; 14.04.2011
comment
Спасибо! это помогло мне - person Amazigh.Ca; 11.01.2017
comment
Обратите внимание, что этот метод также работает с FOR JSON PATH. Спасибо за совет! - person Mr. Tim; 07.03.2018