sp_send_dbmail с проблемой двоичного вложения

Я пытаюсь использовать sp_send_dbmail для отправки вложения. Вложение хранится в столбце varbinary(MAX) в таблице. Вот мой запрос:

EXEC msdb.dbo.sp_send_dbmail 
        @recipients='[email protected]',
        @subject = 'Test Attachment',
        @body = 'Test',
        @body_format = 'HTML',
        @profile_name = 'intranetadmin',
        @query = 'Select DocumentData from [myDB].[dbo].[Documents] Where DocumentID = 8',
        @query_result_header = 0,
        @attach_query_result_as_file = 1,
        @query_attachment_filename = 'Test.pdf',
        @exclude_query_output = 1,
        @query_no_truncate = 0;

Письмо успешно отправлено с вложением в формате PDF. Однако, когда дело доходит до открытия вложения, я получаю сообщение об ошибке. Я думаю, что размер файла усекается, хотя я прямо не указываю в своем запросе.

Я проверил максимально допустимый размер сообщения в настройках Database Mail, и в настоящее время он составляет 104857600 байт (100 МБ), файлы, которые я пытаюсь отправить, далеки от этого размера, поэтому я немного озадачен.


person Mick Walker    schedule 18.10.2012    source источник
comment
Спасибо за фрагмент кода. Я следую вашему примеру, и у меня возникают две проблемы. Во-первых, \n(1 rows affected) добавляется к файлу. Исправьте это с помощью SET NOCOUNT ON перед вашим фактическим запросом. (Хотя это по-прежнему оставляет \n в конце.) Во-вторых, данные в текстовом формате, а не в двоичном формате. В моем столбце varbinary(max) есть следующие данные: 0x255044462D312E340A3120... Они записываются в файл вложения в виде обычного текста, а не двоичного. Я не знаю, как это исправить.   -  person Eric    schedule 12.11.2019


Ответы (2)


Я знаю, что это старая тема, но я только что столкнулся с той же проблемой. Проблема в том, что SQL сообщил об ошибке и сохранил сообщение об ошибке во вложении.

Измените имя вложения, чтобы оно имело расширение .txt, и отправьте электронное письмо. Откройте файл .txt и просмотрите ошибку. Вероятно, что-то не так с конфигурацией безопасности.

person joehanna    schedule 16.06.2015

Попробуйте установить для параметра @query_no_truncate значение 1. Когда в запросе используются большие типы данных переменной длины, а этот параметр равен 0 или не указан, данные обрезаются до 256 символов. Ссылка: http://msdn.microsoft.com/en-us/library/ms190307.aspx

person Ivan G    schedule 18.10.2012