表格包含以下内容:
ID: 4
DATE: 040910
COUNT: 42
如果表格中已存在ID和DATE,请将计数增加1。 如果特定ID和DATE尚不存在,请使用计数1创建。 “ID”不是唯一的 - 只要日期代码发生变化,它就可能在表格中重复出现。
每次我想到一个解决方案,它似乎都会引发竞争条件。我想过BEGIN / END交易,但这似乎也不是100%可靠。我不能只是插入,如果它失败然后更新,除非我将ID字段合并到DATE并使其成为一个唯一的列。
想法?
编辑:我刚才想到了这个:
INSERT INTO table (...) VALUES (...)
WHERE NOT EXISTS (SELECT 1 FROM table WHERE table.id == x AND table.date == y)
UPDATE table SET count = count + 1 WHERE table.id == x AND table.date == y
所以总是执行更新,但插入取决于表的当前值,但我担心仍有2条记录可能出现相同的id&日期。
答案 0 :(得分:2)
交易有什么问题?除非SQL Server中存在错误,否则它们将按照描述的方式工作。您还可以设置交易的ISOLATION LEVEL
以满足您的需求。
BEGIN TRANSACTION;
UPDATE YourTable
SET Count = Count + 1
WHERE ID = X AND Date = Y;
IF @@rowcount = 0
INSERT INTO YourTable (ID, Date, Count)
VALUES (X, Y, 1);
COMMIT TRANSACTION;
您还应该对两列都有唯一约束(即:UNIQUE(ID, DATE)
)