2015-04-07 3 views
3

Я пытаюсь использовать sp_send_dbmail для отправки результатов запроса через SQLAgent-задание в SQL Server 2014. Я считаю, что профиль моей базы данных настроен правильно, но при запуске:Общий сбой с использованием sp_send_dbmail в SQL Server 2014

exec msdb.dbo.sp_send_dbmail 
@profile = 'TestProfile', 
@recipients = '[email protected]', 
@subject = 'Test', 
@query = 'SELECT id FROM TestTable', 
@attach_query_result_as_file = 1, 
@query_attachment_filename = 'TestValues.txt' 

Я получаю следующее сообщение об ошибке:

Failed to initialize sqlcmd library with error number -2147467259. 

погуглить это сообщение об ошибке не оказаться ничего полезного, вероятно из-за общее количество ошибок. Кто-нибудь имеет некоторое представление об этом сообщении об ошибке?

+0

Является ли ваш экземпляр установленным для DBMail? В SSMS щелкните правой кнопкой мыши экземпляр в верхней части Обозревателя объектов и выберите «Границы». Измените настройку Facet в Surface Area Configuration и убедитесь, что DatabaseMailEnabled = True. –

+0

Отличная точка; DatabaseMailEnabled True для моего сервера. Для меня это не проблема. Я продолжаю тестирование сегодня и опубликую все, что я нахожу, что, похоже, помогает. –

+0

Хммм, только что нашел, что если я удалю '@query, @attach_query_result и @ query_attachment_filename', замените их просто простым сообщением' @ body', он отлично работает. Как только я вернусь к '@ query', он терпит неудачу. Я видел, что это вопрос разрешения через SqlAgent, но я просто пытаюсь запустить команду из окна Query с моим администратором в настоящий момент. –

ответ

4

Я обнаружил, что, несмотря на то, что оба окна запроса (для тестирования) и задания SqlAgent указывали на мою желаемую базу данных, sp_send_dbmail, похоже, не имеет какого-либо контекста базы данных. Мой исходный пост был неудачным, потому что SQL не знал, где запускать SELECT * FROM TestTable. Исправление заключается в обеспечении sp_send_dbmail с контекстом базы данных либо полностью квалифицируя вашей таблицы в @query параметра:

@query = 'SELECT id FROM testDB.dbo.TestTable' 

или путем предоставления дополнительного @execute_query_database параметра:

@execute_query_database = 'testDB' 
2

Включить роль сервера сисадмин для учетной записи, используется для запуска SQL Server Agent. Ниже приведены скриншоты.

Ошибка

Failed to initialize sqlcmd library with error number -2147467259

Fix

Enable server role sysadmin for SQL Server Account running SQL Server Agent

Теперь SQL Server Работа выполняется без каких-либо ошибок, и я получаю письмо от dbmail.

enter image description here

+0

Это было для меня проблемой. Никакая комбинация '@ execute_query_database' или полностью квалифицированных табличных ссылок не решала проблему для меня.В моем случае '@ query' был соединением между двумя различными базами данных, и даже если бы я поместил все это в представление, я не смог бы заставить его работать, пока не последую этому совету и не предоставил права администратора sysadmin SQL. – N1njaB0b

+0

@ N1njaB0b Рад знать, что это сработало для вас. Upvote :-)? –

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