【发布时间】:2014-12-22 19:39:05
【问题描述】:
我正在尝试调用包装 T-SQL 的 sp_send_dbmail 过程的存储过程。它只是创建查询,然后将该查询以及硬编码的主题和收件人传递给 Microsoft 提供的存储过程。从 sql management studio 运行时,存储过程按预期执行,我收到一封电子邮件。从 pyodbc,它不发送电子邮件。我的 sproc 的内容类似于:
declare @qry varchar(MAX)
set @qry = 'select * from table'
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'email@email.com',
@subject = 'my email',
@query = @qry
select * from table
where 1=0
我也尝试切换 @exclude_query_output, 标志,但没有效果。我正在通过以下方法调用该存储过程:
def execute_sproc(query, cnxn):
cursor = cnxn.cursor();
rows = cursor.execute(query)
columns = [column[0] for column in cursor.description]
return pd.DataFrame.from_records(rows, columns=columns)
查询只是在执行我的包装存储过程。正如我之前提到的,包装 sproc 在从管理工作室运行时可以工作,但在此处调用时不会发送电子邮件。我在两个地方都使用相同的凭据来访问我的数据库。我还使用此函数成功调用了其他存储过程,但它们都没有包含 exec 语句,它们也没有完成我确定 sp_send_dbmail 正在做的许多其他事情。
如果您有任何想法,请告诉我。
谢谢, 马克斯·高盛
【问题讨论】:
-
只是一个想法 - 确保 sql server 配置文件设置正确。将 @profile='myprofile' 添加到您对 sp_send_dbmail 的调用中。