SQLSERVER 中實現類似Mysql的 INSERT ON DUPLICATE KEY UPDATE


通過SQLServer創建索引時,有一個IGNORE_DUP_KEY的選項,可以類似實現。

 IGNORE_DUP_KEY = { ON | OFF } 

指定對唯一聚集索引或唯一非聚集索引執行多行插入操作時出現重復鍵值的錯誤響應。默認值為 OFF。

ON
發出一條警告信息,但只有違反了唯一索引的行才會失敗。 

OFF
發出錯誤消息,並回滾整個 INSERT 事務。 

IGNORE_DUP_KEY 設置僅適用於創建或重新生成索引后發生的插入操作。該設置在索引創建操作期間無效。

對於 XML 索引以及對視圖創建的索引,IGNORE_DUP_KEY 不能設置為 ON。 

在向后兼容的語法中,WITH IGNORE_DUP_KEY 等效於 WITH IGNORE_DUP_KEY = ON。

 

create table test1(rsmainkeyid int identity(1,1),rsdatetime datetime,userid int , teacherid int)
 
 
--建立唯一索引,注意  IGNORE_DUP_KEY = ON

CREATE UNIQUE NONCLUSTERED INDEX [idx_test] ON [dbo].[test1] 
(
    [userid] ASC,
    [teacherid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF,
 SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = ON, DROP_EXISTING = OFF,
  ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO



create table #t11 (userid int  ,teacherid int)

declare @i int
set @i=1
while @i<1000
  begin
  insert #t11 values(@i,@i)
  set @i=@i+1
end
   
  
update #t11 set userid =1 ,teacherid=1 where userid  =999
  
insert into test1 (rsdatetime, userid ,teacherid)
  select GETDATE(),userid ,teacherid  from #t11
--998

已忽略重復的鍵。

(998 行受影響)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM