sp_send_dbmail вставляет разрывы строк в прикрепленный результат XML-запроса - PullRequest
1 голос
/ 26 сентября 2010

Когда вы используете 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)

...