簡體   English   中英

SQL 服務器插入(如果不存在)

[英]SQL Server Insert if not exist

我知道 SELECT + INSERT 是一種不好的做法,可能會導致競爭條件(當一些嘗試實施 upsert 行為的人從 insert-update 反模式中學到)。

但是我不知道如何避免這種情況,因為我只是在表中插入數據,而給定列(或列的元組)沒有重復:

IF NOT EXISTS ( SELECT TOP(1) 1 FROM [tbl_myTable] WHERE [MyNotKeyField] = 'myValue' )
BEGIN
     INSERT INTO [tbl_myTable] (...) VALUES (...)
END

我應該創建一個唯一索引並嘗試插入記錄嗎? 恐怕在這種情況下,插入失敗的開銷可能會更高。

PS:我從客戶端應用程序(與 SQL 服務器連接的 C# 應用程序)發送該命令,所以我認為臨時表和使用 MERGE 是不可能的。

EXISTSINSERT結合

例如

INSERT INTO [tbl_myTable] (...) 
SELECT @val1, @val2 ...
WHERE NOT EXISTS
(
    SELECT 1 FROM [tbl_myTable] WITH (UPDLOCK, SERIALIZABLE)
    WHERE [MyNotKeyField] = 'myValue'
);

Aaron Bertrand 有一篇關於反 UPSERT 模式的 精彩文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM