如何发送时只添加新的记录

问题描述:

我有这样如何发送时只添加新的记录

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小时只发送邮件,如果它得到了新的记录,否则没有必要送...任何想法可以请你建议

+0

添加一个名为'processed'的日期时间列。当您通过电子邮件发送记录时,会更新通过电子邮件发送的“已处理”列。在下一次运行测试,如果有任何记录与'处理为空' – cha

+0

我将如何检查条件处理 – mohan111

+1

***什么***查询!?!?你谈论它 - 但你从来没有**向我们展示它! –

我建议你这样做。修改你的表并添加一个新列:

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 
+0

是啊我同意这一点,当我再运行两个小时后,我会检查与isprocessed NULL,但我需要发送累积电子邮件,如果它添加新的记录,否则我不需要......我需要如何处理该条件 – mohan111

+0

当一个新的记录添加处理的列将是该记录为NULL – cha

正如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