SQL Server 2000相当于ON DUPLICATE KEY?

时间:2010-02-08 07:07:44

标签: sql mysql sql-server

是否存在与MySQL的ON DUPLICAT KEY子句等效的SQL Server 2000功能? This Answer让我看看而不是触发器构造,但样本看起来很笨重,功能将隐藏在触发器中,而不是直接在存储过程中。

FWIW:我正在尝试为每分钟摘要创建一个统计表,这样我就可以调用一个过程来记录一个动作发生的事实,并在适当的时间内递增计数器。

3 个答案:

答案 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 ...])

http://en.wikipedia.org/wiki/Merge_(SQL)

答案 2 :(得分:1)

也很笨重,但你可以在你的程序中这样做:

insert ... where not exists (...);

update ....;

知道您的插入将在数据是新的时触发,并且仅在数据存在时才更新。