![](/img/trans.png)
[英]SQL Server stored procedure - check if ANY records exist, and insert if not
[英]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 是不可能的。
將EXISTS
與INSERT
結合
例如
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.