4

我正在尝试sp_send_dbmail通过 SQL Server 2014 中的 SQLAgent 作业发送查询结果。我相信我的 DBMail 配置文件设置正确,但是在运行时:

exec msdb.dbo.sp_send_dbmail
@profile = 'TestProfile',
@recipients = 'testmail@gmail.com',
@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.

谷歌搜索此错误消息并没有发现任何有用的信息,可能是由于通用错误号。有人对此错误消息有一些了解吗?

4

3 回答 3

6

我发现尽管我的查询窗口(用于测试)和 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'
于 2015-04-08T14:03:02.187 回答
2

为用于运行 SQL Server 代理的帐户启用 sysadmin 服务器角色。以下是屏幕截图。

错误

初始化 sqlcmd 库失败,错误号为 -2147467259

使固定

为运行 SQL Server 代理的 SQL Server 帐户启用服务器角色 sysadmin

现在 SQL Server 作业运行没有任何错误,并且我收到了来自 dbmail 的电子邮件。

在此处输入图像描述

于 2016-02-15T01:57:47.170 回答
0

您可能会收到此错误还有另一个原因;如果查询有问题。

在我们的例子中(请注意,这不是由于语法错误;请注意缺少的引号):

DECLARE @EmailQuery varchar(max) = 'select 
                                    e.Field1,
                                    REPLACE(REPLACE(e.ExceptionReason, CHAR(13), ''), CHAR(10), '') ExceptionReason,
                                    e.UserName
                                from dbo.tblException e'

一旦我们将其更正如下,它就可以正常工作:

DECLARE @EmailQuery varchar(max) = 'select 
                                    e.Field1,
                                    REPLACE(REPLACE(e.ExceptionReason, CHAR(13), ''''), CHAR(10), '''') ExceptionReason,
                                    e.UserName
                                from dbo.tblException e'
于 2018-10-23T17:46:26.760 回答