是否存在与MySQL的ON DUPLICAT KEY子句等效的SQL Server 2000功能? This Answer让我看看而不是触发器构造,但样本看起来很笨重,功能将隐藏在触发器中,而不是直接在存储过程中。
FWIW:我正在尝试为每分钟摘要创建一个统计表,这样我就可以调用一个过程来记录一个动作发生的事实,并在适当的时间内递增计数器。
答案 0 :(得分:2)
我用这个:
begin tran;
update ... where ... ;
if @@rowcount = 0
insert ...
commit tran;
据我了解,如果有适当的索引,更新会放置适当的范围锁定,以防止其他人同时插入相同的内容。
答案 1 :(得分:1)
upsert
http://en.wikipedia.org/wiki/Upsert
INSERT ... WHERE NOT EXISTS (SELECT 1 FROM table WHERE id = ?)
<强>合并强>
但我认为只在SQL 2003中
MERGE INTO table_name USING table_name ON (condition)
WHEN MATCHED THEN
UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN
INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])
答案 2 :(得分:1)
也很笨重,但你可以在你的程序中这样做:
insert ... where not exists (...);
update ....;
知道您的插入将在数据是新的时触发,并且仅在数据存在时才更新。