我需要创建一个存储过程,在执行检查时是否在过去12小时内将任何新行添加到表中。如果没有,则必须向收件人发送警告电子邮件。
我有发送电子邮件的程序,但问题是查询本身。我想我必须创建一个使用当前日期的sql命令,并将其与行中的日期进行比较。但我是SQL的初学者,所以我甚至无法使用正确的单词在谷歌上找到任何东西。
简短版本:
使用MS SQL Server 2005,如何检查日期,然后根据过去12小时内是否创建新行返回结果,并使用该结果来决定是否发送电子邮件?
答案 0 :(得分:6)
这样的事情应该按你的意愿行事。
Select ID
from TableName
where CreatedDate >= dateadd(hour,-12,getDate())
希望这是明确的,但请随意提出进一步的问题。
干杯,约翰
答案 1 :(得分:5)
假设表中的日期字段是'CreateDate',它的类型是DateTime。 你的时间比较是:GETDATE() (返回日期+时间) 要在此之前获得12小时的日期时间值,请使用DATEADD完成: DATEADD(小时,-12,GETDATE())
因此,如果我们想要在过去12小时内添加的行数,我们会这样做:
SELECT COUNT(*)
FROM Table
WHERE CreateDate >= DATEADD(hour, -12, GETDATE())
在你的proc中,你要将这个查询的结果存储到一个变量中并检查它是否是> 0,所以:
DECLARE @amount int
SELECT @amount=COUNT(*)
FROM Table
WHERE CreateDate >= DATEADD(hour, -12, GETDATE())
然后你会检查@amount变量是否是> 0.
答案 2 :(得分:0)
您可以使用触发器,此链接有几个示例:http://msdn.microsoft.com/en-us/library/aa258254(SQL.80).aspx
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the distributors.'
GO
如果您不希望每次插入/更新都有内容,您可以将数据复制到另一个表,然后每隔12小时检查一次该表,报告其中的行,然后删除它们......
答案 3 :(得分:0)
假设你在这张桌子上: - 要么是一个独特的id自动增量 - 包含创建行的时间戳的created_timestamp字段
- >有一张新桌子
reported_rows
- report_timestamp
- last_id_seen
(OR)
- last_timestamp_seen
每当您使用实际值发送电子邮件时,填写报告的行 在发送电子邮件之前,请检查以前的值,以便了解添加了哪些行
答案 4 :(得分:0)
如果表格有一个标识字段,您还可以保存最大值(作为书签),然后检查是否有任何ID大于您保存的书签的行。如果密钥是群集密钥,则可能更快。