【发布时间】:2017-04-28 22:41:13
【问题描述】:
我们有许多用于报告的存储过程。所有这些程序都遵循以下格式。本质上,SP确实起作用了,最终结果被插入到一个@table变量中:
ALTER procedure dbo.usp_GetComplexData
as
declare @MyTable table
(
Col1 varchar(20),
Col2 varchar(20)
)
-- Here the SP is doing lots of work with lots of tables.
-- The result inserted in @MyTable
SELECT Col1, Col2 from @MyTable
现在我需要通过电子邮件(以 html 格式)发送这些存储过程的结果。
我还有SpCustomTable2HTML(找到at Symantec)可以将任何表格转换为html表格。它不需要表模式来完成它的工作;它只是获取表格并返回一个 html 表格。
所以这里是存储过程:
ALTER procedure usp_sendHtmlReportViaEmail
as
DECLARE @HTML1 NVARCHAR(MAX)
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
drop TABLE #results
select top 50 * into #results From MyTable
EXEC SpCustomTable2HTML '#results', @HTML1 OUTPUT, '', ''
EXEC sp_send_dbmail @profile_name='My profile',
@recipients='test@Example.com',
@subject='Test message',
@body_format = 'HTML',
@body=@HTML1
我想以某种方式从usp_GetComplexData 调用usp_sendHtmlReportViaEmail,方法是发送@MyTable 作为参数。我正在阅读有关table valued parameters 的信息,但这需要为我将通过的每个表创建一个 TVP。我不想为将传递给usp_sendHtmlReportViaEmail 的每个表创建一个特定的 TVP。
还有其他选择吗?
谢谢。
【问题讨论】:
-
在 SSRS 中,您可以将报告导出为 html 或 mhtml(带有嵌入图像)。考虑选择 SSRS 来生成报告,而不是自己做这项工作
-
我考虑过,但考虑到它需要成为一个固定的工作,我认为这会更困难。这些报告按计划发送(即每小时)。
-
在我公司,我们经常以您提供的方式发送表格。如果您不想使用任何报告服务,这是最好的方法
-
@MikhailLobanov,你是说不要使用 SSRS?
-
不,SSRS 更适合报告。有一天,您将希望发送复杂的报告,其中一些将使用 SSRS 发送,而另一些则使用
sp_send_dbmail程序发送。这样不好。但是您问的是在没有 SSRS 的情况下发送报告,而您的查询对此很有用
标签: sql-server sql-server-2008 tsql