Аналог ON DUPLICATE KEY UPDATE SQL Server

Есть таблица для записи статистики за день

CREATE TABLE mailStats (
  dt DATE NOT NULL CONSTRAINT PK_mailStats PRIMARY KEY,
  total INT NOT NULL,
  failed INT NOT NULL,
);

Нужно записать в неё общее количество действий и количество фэйлов скриптом, запускающимся по крону к примеру раз в час. При этом мы не знаем, создана ли запись на сегодняшний день, а выполнить всё хочется за один запрос. Тут бы на помощь пришёл «ON DUPLICATE KEY UPDATE» от MySql, но в SQL Server его нет. Можно сделать так:

MERGE mailStats AS target
USING ( SELECT CAST( GETDATE() AS DATE ) AS dt ) AS source
ON
	target.dt = source.dt
WHEN MATCHED THEN
	 UPDATE SET target.total = target.total + :total, target.failed = target.failed + :failed
WHEN NOT MATCHED BY TARGET THEN
	 INSERT ( dt, total, failed )
	 VALUES ( source.dt, :total, :failed );

http://msdn.microsoft.com/en-us/library/bb522522.aspx

LEAVE A COMMENT