Использование SQL Server «FOR XML»: преобразовать тип данных результата в текст / varchar / string? - PullRequest
4 голосов
/ 14 апреля 2011

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

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

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

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

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

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

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

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

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

1 Ответ

19 голосов
/ 14 апреля 2011

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

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

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

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

...