sp_send_dbmail вставляет разрывы строк в прикрепленный результат XML-запроса

Когда вы используете msdb.dbo.sp_send_dbmail чтобы отправить результат запроса в виде вложения, вам необходимо предоставить @query_result_width параметр, который является целым числом от 10 до 32767.
Теперь, если вы используете For XML Path('Row'), Root('Data'), Type в вашем самом внешнем запросе Select вы можете получить send_dbmail для отправки xml-вложения, которое действительно легко открыть в Microsoft Excel (всего 2 или 3 клика, и это хорошая таблица Excel)
Но если ваш xml-файл превышает 32767 байт, send_dbmail вставит "разрыв строки" в 32767-й столбец первой строки xml-файла, и это НЕОБХОДИМО! Это значит, что все равно, что там написано; это просто ломает черту и, следовательно, БУДЕТ испортить ваши xml-данные... Я бродил по Интернету более 5 часов без какого-либо положительного результата о том, как я должен препятствовать sp_send_dbmail вводить этот неприятный разрыв строки. Единственное решение, с которым я столкнулся, - это ввести разрыв строки, когда у меня есть элемент управления, а это не после 32767-го столбца. Запрос, подобный следующему, добьется цели, но это дополнительная работа, а не чистая...

Select Replace(
    Cast(
        (
            Select
                *
            From Table
            For XML Path('Row'), Root('Data'), Type
        )
    As NVarChar(Max))
, N'/>', N'/><!--This is the controlled line-break. Remove this comment-->
')

У кого-нибудь есть идея получше? Я что-то здесь упускаю?
Я использую SQL Server 2008 Enterprise (x64)

0 ответов

Другие вопросы по тегам