首页 / SQL Server / 正文

[SQL Server]SQL Server数据库中判断数据存在则更新,不存在则插入数据的方法有哪些?

13048 发布于: 2018-01-11 读完约需4分钟

[SQL Server]SQL Server数据库中判断数据存在则更新,不存在则插入数据的方法有哪些?

问题描述

在很多项目中,我们有这样的需求:在向数据表中插入数据之前,需要先判断这条数据是否存在,如果存在,则更新,如果不存在,则插入新数据,实现方案有哪些呢?

方案一

begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
   update table set ...
   where key = @key
end
else
begin
   insert into table (key, ...)
   values (@key, ...)
end
commit tran

或者

begin tran
   update table with (serializable) set ...
   where key = @key

   if @@rowcount = 0
   begin
      insert into table (key, ...) values (@key,..)
   end
commit tran

方案二

SQL Server 2008 或者以上版本,可以使用MERGE关键字:

merge tablename with(HOLDLOCK) as target
using (values ('new value', 'different value'))
    as source (field1, field2)
    on target.idfield = 7
when matched then
    update
    set field1 = source.field1,
        field2 = source.field2,
        ...
when not matched then
    insert ( idfield, field1, field2, ... )
    values ( 7,  source.field1, source.field2, ... )

方案三

IF EXISTS (SELECT * FROM [Table] WHERE ID = rowID)
UPDATE [Table] SET propertyOne = propOne, property2 . . .
ELSE
INSERT INTO [Table] (propOne, propTwo . . .)

方案四

MERGE INTO table_name WITH (HOLDLOCK) USING table_name ON (condition)
WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...])

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: .NET[C#]LINQ将List<string>集合使用连接符连接成单个字符串?

下一篇: [SQL Server]SQL Server数据库中判断临时表是否存在并删除后创建的方法有哪些?

本文永久链接码友网 » [SQL Server]SQL Server数据库中判断数据存在则更新,不存在则插入数据的方法有哪些?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册