发送带有 sp_send_dbmail 的附件时出现错误无法初始化 sqlcmd 库,错误号为 -2147467259

Sending attachment with sp_send_dbmail getting error Failed to initialize sqlcmd library with error number -2147467259

我正在尝试使用以下代码在 SQL 中测试发送附件。我收到错误 - 无法初始化 sqlcmd 库,错误号为 -2147467259。发送电子邮件工作正常,只有在添加 @query 时我才开始收到此错误。我错过了什么?

DECLARE @query nvarchar(max) = 'select top (1) * from employees';
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Email',
@recipients = 'me@gmail.com',
@query = @query,                     
@query_attachment_filename = 'employees.csv',      
@body_format = 'HTML',
@subject = 'Test';

使用 @query 参数 sp_send_dbmail 的查询 运行 在 msdb 的上下文中是 运行。这意味着对于您的查询,您实际上是在尝试引用一个对象 msdb.dbo.employees。该对象不太可能存在于 msdb 中,因为它是一个系统数据库(如果存在,我建议移动它),并且由于该对象不存在,查询无法解析并且 sp_send_dbmail 产生错误。

要解决此问题,请在为 @query 参数定义的查询中使用 3 部分命名:

DECLARE @query nvarchar(MAX) = N'SELECT TOP (1) * FROM YOurDatabase.dbo.employees ORDER BY YourColumn;'; --Replace values as needed
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Email',
@recipients = 'me@gmail.com',
@query = @query,                     
@query_attachment_filename = 'employees.csv',      
@body_format = 'HTML',
@subject = 'Test';