尝试使用sp_send_dbmail从sproc输出结果 (感谢Joe Stefanneli的解决方案)。 使用全局Temp表变量(## Summary)时,它可以工作。 使用本地Temp表变量(#Summary)时,它失败。 根据我的阅读,全局变量选项在这里不适用,因为web应用程序将调用sproc,因此会同时引用同一个临时表。
显然,对sp_send_dbmail的调用不是“内部上下文”,因此局部变量失败。 有解决方案吗?
Sproc flow: 创建表#Summary (字段...)
Select stuff into #Summary
exec msdb.dbo.sp_send_dbmail
@profile_name = 'Me',
@recipients = 'me@mysite.co.nz',
@body = 'Test from Me',
@subject = 'Automated Test Message',
@query = 'select * from #Summary ' ,
@attach_query_result_as_file = 1,
@query_attachment_filename = 'testing.csv',
@query_result_separator=','
drop table #Summary
感谢
答案 0 :(得分:3)
临时表不起作用,因为邮件功能只是将电子邮件排队,因此该表必须可用于不同的进程和连接。你可以
答案 1 :(得分:0)
我刚刚发现了一个使用SQL sp_send_dbmail存储过程的文件附件的绝佳解决方案。
如果我们想要将任何查询的输出作为excel附件发送(其中TABLE1可以是DB中的临时表或永久表)
SELECT COLUMN1, COLUMN2, COLUMN3 FROM TABLE1
声明一个VARCHAR(MAX)@VAR变量,它将具有HTML TABLE属性TABLE
遍历要作为附件发送的表行,将每行列数据包装在HTML TR TD属性中并将其附加到@VAR并将其打印在sp_send_dbmail的@query参数中
@VAR =
TABLE
TR
TD COLUMN1ROW1DATA /TD
TD COLUMN2ROW1DATA /TD
TD COLUMN3ROW1DATA /TD
/TR
/TABLE
@query = 'PRINT ' + @VAR
这就像魅力一样,我们也可以在excel文件中看到这个HTML表格的格式。
答案 2 :(得分:0)
在我自己的问题中碰到了这个。全局临时表将起作用。使用##创建表,并使用电子邮件sql从中查询,它将起作用。
答案 3 :(得分:0)
您可以使用像##temp_table 这样的全局临时表。只是不要使用像#this_table 这样的本地#temp_table。 sp_send_dbmail 在不同的上下文中执行并且不知道本地临时表。