SQL在日期到来之前发出警告

时间:2015-12-03 11:06:09

标签: sql-server date triggers

我有2个列,分别是'Name'和'PayDay'。'Payday'是日期类型,'Name'是nvarchar。我想知道我可以在他/她的发薪日前2天收到一个人名的电子邮件。例如,“姓名”是约翰,“发薪日”是12.5.2015。我需要收到一封电子邮件,其中包含2015年10月10日的“John”这个名字。我做了一个研究,发现触发器是一个很好的选择。我可以为触发器和邮件服务提供任何建议。谢谢。

2 个答案:

答案 0 :(得分:2)

我们有类似的情况,我们在预计完成日期之前警告百分比进度。我不认为触发器将成为您正在寻找的解决方案。

在我们的例子中,我开发了一个简单的存储过程来读取所有表格值,预计在x天内完成。然后我使用了这个select并将结果连接成一个参数。如果长度大于0,则发送电子邮件。

我使用的电邮代码是:

EXEC msdb.dbo.sp_send_dbmail 
@profile_name='SQLMail',                          -- Your email profile name here
@recipients'email1@domain.com;email2@domain.com;',-- Recipients emails
@subject='Projects nearing completion',           -- Subject line
@body=@myEmailContent                             -- String built above 

有很多很好的指南可以通过电子邮件发送,包括所有设置。

为了执行此操作,我从SQL服务器代理运行它,并将其安排在午夜后运行。这意味着我总是收到一封新邮件,但我每天只收到一封电子邮件。如果您尝试从触发器运行此操作,则每次写入表时都会收到一封电子邮件。

如果您对此有任何疑问,请给我留言,我会看到我可以做些什么来帮助。

答案 1 :(得分:2)

DECLARE @t TABLE(
    Name NVARCHAR(50),
    PayDay DATE
)

INSERT INTO @t (Name, PayDay)
VALUES (N'Jonh 1', '20151203'), (N'Jonh 2', '20151201')

DECLARE @date DATE = DATEADD(DAY, 2, GETDATE())

IF EXISTS(SELECT 1 FROM @t WHERE PayDay = @date) BEGIN

    DECLARE @recipients NVARCHAR(MAX)
    SELECT @recipients = STUFF((
        SELECT ', ' + Name
        FROM @t
        WHERE PayDay = @date
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, CONVERT(VARCHAR(10), @date) + ':')

    EXEC msdb.dbo.sp_send_dbmail
        @recipients = 'your_account@gmail.com',
        @subject = 'caption',
        @body = @recipients

END

数据库邮件+ sql agent中的每日作业+上面的代码