簡體   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