SQL - как проверить таблицу на новые данные? - PullRequest
4 голосов
/ 06 февраля 2009

Мне нужно создать хранимую процедуру, которая после исключения проверяет, были ли какие-либо новые строки добавлены в таблицу за последние 12 часов. В противном случае получателю необходимо отправить электронное письмо с предупреждением.

У меня есть процедуры для отправки электронного письма, но проблема в самом запросе. Я предполагаю, что мне нужно будет создать команду sql, которая использует текущую дату и сравнивает ее с датами в строках. Но я новичок в SQL, поэтому даже не могу использовать правильные слова, чтобы найти что-нибудь в Google.

Короткая версия:

Используя MS SQL Server 2005, как я могу проверить соответствие датам, а затем вернуть результат, основанный на том, были ли созданы новые строки за последние 12 часов, и использовать этот результат, чтобы решить, отправлять или нет электронную почту?

Ответы [ 5 ]

6 голосов
/ 06 февраля 2009

Что-то вроде этого должно делать то, что вы хотите.

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

Надеюсь, это понятно, но не стесняйтесь задавать дополнительные вопросы.

Ура, Джон

5 голосов
/ 06 февраля 2009

Скажите, что ваше поле даты в таблице 'CreateDate' и имеет тип DateTime. Ваше время для сравнения: GETDATE () (который возвращает дату + время) Чтобы получить значение datetime за 12 часов до этого, выполните DATEADD: DATEADD (час, -12, GETDATE ())

поэтому, если мы хотим добавить количество строк за последние 12 часов, мы сделаем:

SELECT COUNT(*)
FROM Table
WHERE CreateDate >= DATEADD(hour, -12, GETDATE())

в вашем процессе вы должны сохранить результат этого запроса в переменной и проверить, равен ли он> 0, поэтому:

DECLARE @amount int
SELECT @amount=COUNT(*)
FROM Table
WHERE CreateDate >= DATEADD(hour, -12, GETDATE())

и тогда вы проверите переменную @amount, если она> 0.

0 голосов
/ 06 февраля 2009

Если в таблице есть поле идентификации, вы также можете сохранить максимальное значение (в виде закладки) и в следующий раз проверить, есть ли строки с идентификатором, превышающим вашу сохраненную закладку. Может быть быстрее, если ключ является кластеризованным ключом.

0 голосов
/ 06 февраля 2009

при условии, что у вас есть на этом столе: - либо уникальный идентификатор автоинкремент - либо поле create_timestamp, содержащее метку времени создания строки

-> есть новая таблица

reported_rows
  - report_timestamp
  - last_id_seen
 (OR)
  - last_timestamp_seen

заполняйте отчетную строку каждый раз, когда отправляете электронное письмо с фактическим значением и перед отправкой электронного письма проверьте предыдущие значения, чтобы вы знали, какие строки были добавлены

0 голосов
/ 06 февраля 2009

Вы можете использовать триггер, эта ссылка имеет несколько примеров: 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 часов просматривать эту таблицу, сообщать о строках в ней и затем удалять их ...

...