繁体   English   中英

SQL - 如何检查表中的新数据?

[英]SQL - how to check table for new data?

我需要创建一个存储过程,在执行检查时是否在过去12小时内将任何新行添加到表中。 如果没有,则必须向收件人发送警告电子邮件。

我有发送电子邮件的程序,但问题是查询本身。 我想我必须创建一个使用当前日期的sql命令,并将其与行中的日期进行比较。 但我是SQL的初学者,所以我甚至无法使用正确的单词在谷歌上找到任何东西。

简洁版本:

使用MS SQL Server 2005,如何检查日期,然后根据是否在过去12小时内创建新行返回结果,并使用该结果来决定是否发送电子邮件?

这样的事情应该按照你的意愿行事。

Select ID
from TableName
where CreatedDate >= dateadd(hour,-12,getDate())

希望这很清楚,但请随时提出进一步的问题。

干杯,约翰

假设表中的日期字段是'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。

你可以使用一个触发器,这个链接有几个例子: 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小时检查一次该表,报告其中的行,然后删除它们......

假设你有这个表: - 一个唯一的id自动增量 - 一个created_timestamp字段,包含创建行的时间戳

- >有一张新桌子

reported_rows
  - report_timestamp
  - last_id_seen
 (OR)
  - last_timestamp_seen

每次使用实际值发送电子邮件时填写报告的行,在发送电子邮件之前,请检查以前的值,以便了解添加了哪些行

如果表具有标识字段,您还可以保存最大值(作为书签),并在下次检查是否存在ID大于保存书签的行。 如果密钥是群集密钥,则可能更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM