如何发送时只添加新的记录
问题描述:
我有这样如何发送时只添加新的记录
empid ename sal
-----------------------
1 raj 1000
2 somu 20000
的样本数据。当我运行此查询会在加载使用SSIS或SQL Server表,我需要发送邮件使用发送邮件任务或sp_dbsendmail
我会照顾那一个。
该查询将通过Job每两个小时运行一次。
当它得到了加载到表会以表格的形式发送邮件,称它有2个记录再2小时后它只有2条没有必要发送邮件,如果有任何额外的记录需要发送邮件
empid ename sal
---------------------
1 raj 1000
2 somu 20000
3 Mohan 2000
作业将运行每隔2小时只发送邮件,如果它得到了新的记录,否则没有必要送...任何想法可以请你建议
答
我建议你这样做。修改你的表并添加一个新列:
ALTER TABLE employee ADD processed DATETIME NULL
此列将有最后一次运行
的日期/时间,你的工作就是皮卡未处理记录,做到这一点:
DECLARE @now DATETIME
SET @now = GetDate()
UPDATE employee SET processed = @now WHERE processed IS NULL
DECLARE @email VARCHAR(MAX)
SELECT @email = COALESCE(@email + '<br>', '') +
empid + ',' + ename + ',' + CONVERT(VARCHAR(20), sal)
FROM employee
where processed = @now
order by empid
print email
--SEND mail
答
正如cha建议在表中添加一个日期列将会帮助你。
此代码将发送查询结果在您的电子邮件正文中。
如果您想作为附件发送请取消注释'取消注释!!!'的代码行。
-- count how many new records you have in the table based on date column
DECLARE @count AS int
SELECT @count = COUNT(empid) FROM MyTbl WHERE processed IS NULL
-- if you have new records -> send email otherwise no
IF @count > 0
BEGIN
DECLARE @subject varchar(50) = 'Your subject ... '
DECLARE @Query varchar(max)
DECLARE @recipients varchar(155)
DECLARE @body varchar(155)
--DECLARE @tab char(1) = CHAR(9) -- uncomment this!!!
SET @recipients = '[email protected]'
SET @body = 'bla bla ... ' + cast(@count as varchar) + ' new records have been added bla bla ... ' + CHAR(13)
-- send email with all records available in table ... if you want only new ones add WHERE processed is NULL condition!
SET @Query = CHAR(13) + 'SELECT empid, ename, sal, processed FROM MyTbl'
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'YOUR PROFILE MAIL'
,@recipients = @recipients
,@subject = @subject
,@query = @Query
,@body = @body
,@execute_query_database = 'Your DB name'
--,@attach_query_result_as_file = 1, -- uncomment this!!!
--,@query_attachment_filename = 'filename.csv', -- uncomment this!!!
--,@query_result_separator= @tab, -- uncomment this!!!
--,@query_result_no_padding=1, -- uncomment this!!!
--,@query_result_width=32767 -- uncomment this!!!
END
UPDATE MyTbl SET processed = GETDATE() WHERE processed IS NULL
添加一个名为'processed'的日期时间列。当您通过电子邮件发送记录时,会更新通过电子邮件发送的“已处理”列。在下一次运行测试,如果有任何记录与'处理为空' – cha
我将如何检查条件处理 – mohan111
***什么***查询!?!?你谈论它 - 但你从来没有**向我们展示它! –