Leave a Comment
Аналог ON DUPLICATE KEY UPDATE SQL Server
Есть таблица для записи статистики за день
1 2 3 4 5 |
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 его нет. Можно сделать так:
1 2 3 4 5 6 7 8 9 |
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
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.