2011-04-13 2 views
4

Я борюсь с этим почти через неделю и до сих пор не нашел решения -.-Использование SQL Server «FOR XML»: преобразовать результат в Datatype в текст/varchar/string?

Моя цель - получить 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-соединение через OleDB ... но каждая попытка заканчивается кучей нечитаемых данных.

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

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

Thx, Крис

ответ

17

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

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

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

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

+0

отлично! именно то, что мне нужно! Я уже думал о чем-то подобном, а также пробовал, но все, что я сделал неправильно, я забыл о первом дополнительном «выборе»: P Некоторые вещи могут быть такими легкими, thx много – tunefish

+0

Thank's! это помогло мне –

+0

Обратите внимание, что этот метод также работает с 'FOR JSON PATH'. Спасибо за совет! –

Смежные вопросы