Solutions for INSERT OR UPDATE on SQL Server

未验证,有时间改改再说

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

or

begin tran 
   update table with (serializable) set ... 
   where kay = @key 
 
   if @@rowcount = 0 
   begin 
          insert table (key, ...) values (@key,..) 
   end 
commit tran 

MS Sql2008 introduces merge from the SQL:2003 standard:

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, ... ) 
 另外参考http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值