我发布了一个类似的问题来帮助我编写这个脚本,我发现了它的主要部分 它是一个简单的报表设置,作为SSMS中的SQL代理作业。它使用SP_Send_dbmail通过电子邮件将结果作为HTML表格发送到电子邮件正文中。我让它工作,只有在查询结果的情况下才会发送报告。
我希望它能够在上面执行此操作,省略上一份报告中发送的任何行。
这有可能吗?
这就是我的脚本:
if exists(select o.ord_billto, o.ord_refnum , o.ord_hdrnumber, o.mov_number, o.ord_status, o.ord_cmdvalue, o.ord_startdate
from orderheader o
where ord_billto in ('a','b','c','d')
and DATEDIFF(minute , o.ord_datetaken, GETDATE())<=7
and ord_cmdvalue >= 250000
and ord_status in ('avl','pln','std','cmp')
)
begin
declare @tableHTML NVARCHAR(MAX);
SET @tableHTML=
N'<h1>Test Report</h1>'+
N'<table border=1>'+
N'<tr><th>Bill To</th>'+
N'<th>Reference number</th>'+
N'<th>Order #</th>'+
N'<th>Move #</th>'+
N'<th>Order Status</th>'+
N'<th>Value</th>'+
N'<th>Ship date</th>'+
N'<th>Delivery Date</th>'+
cast(( select td=o.ord_billto, '',
td=o.ord_refnum, '',
td=o.ord_hdrnumber, '',
td=o.mov_number, '',
td=o.ord_status, '',
td=convert(decimal(10, 2), o.ord_cmdvalue), '',
td=convert(varchar, o.ord_startdate, 101), '',
td=convert(varchar, o.ord_completiondate, 101), ''
from orderheader o
where ord_billto in ('a','b','c','d')
and DATEDIFF(minute , o.ord_datetaken, GETDATE())<=7
and ord_cmdvalue >= 250000
and ord_status in ('avl','pln','std','cmp')
for XML path('tr'), type
) as NVARCHAR(MAX) ) +
N'</table>' ;
execute msdb.dbo.sp_send_dbmail
@recipients='e-mail@domain.com',
@subject='Test Report',
@body=@tableHTML,
@body_format='HTML',
@attach_query_result_as_file='false',
@query_attachment_filename='EDI.csv',
@query_result_separator='',
@query_result_no_padding='FALSE'
end
答案 0 :(得分:0)
我刚看了一下我们现有的一个类似的脚本,它在脚本的底部添加了这部分代码;事实证明,我们的订单表上有15个额外的列,用于&#34; flags&#34;
update orderheader set ord_extrainfo2=1
where ord_billto in ('A','B','C','D')
and DATEDIFF(MINUTE , ord_datetaken, GETDATE())<=7
and ord_cmdvalue >= 250000
and ord_status in ('avl','pln','std','cmp')
update orderheader
set ord_extrainfo2=NULL
where ord_billto in ('A','B','C','D')
and DATEDIFF(MINUTE , ord_datetaken, GETDATE())<=7
and ord_cmdvalue <= 250000
and ord_status in ('avl','pln','std','cmp')
and ord_extrainfo2<>NULL
&#13;
感谢您的提示!
答案 1 :(得分:0)
我刚才意识到为什么我不能使用IF(选择[...])&gt; 0 ...
如果我想在脚本中包含多列,我将如何使用该逻辑?基于此的示例在select中只有一个COUNT函数,并且所有行都在HTML Table部分中声明。有什么想法吗?
答案 2 :(得分:0)
我在上面的问题中想到了我可以简单地为我的IF语句添加一个虚拟列,所以我使用了count(o.ord_hdrnumber)。
脚本的更新部分正在运行,但是当将“flag”重置为null时,我得到一个错误,指出无法将varchar值'NULL'转换为int。 ord_extrainfo2列是varchar(30)数据类型...
我使用相同的逻辑获得了另一个报告请求,因此我想一劳永逸地解决这个问题:S