我在最後一個線程中同時提出了兩個問題,第一個問題已得到解答。我決定將原始線程標記爲已回答,並在此重新發布第二個問題。鏈接到原始線程,如果有人想要它: Handling SQL Server concurrency issuesSQL Server併發
假設我有一個表中持有第二張表的外鍵的字段。第一個表中的記錄最初沒有相應的記錄,因此我在該字段中存儲NULL。現在,用戶在某個時候運行一個操作,該操作將在第二個表中生成一條記錄,並將第一個錶鏈接到該記錄。如果兩個用戶同時嘗試生成記錄,則應創建並鏈接單個記錄,另一個用戶將收到一條消息,指出該記錄已存在。我如何確保在併發環境中不創建重複項?
我需要執行的步驟如下:
1)查找的在表中的記錄x個甲
2)執行,其準備被插入到表B中
單行一些業務邏輯3)更新在步驟1中選擇的記錄),以指向新生成的記錄在表B中
我可以使用SCOPE_IDENTITY()來檢索新創建的記錄的表B中的主鍵,所以就不會不需要擔心新的問題記錄因同時交易而丟失。不過,我需要消除併發執行進程的可能性,從而導致創建表B中的重複記錄。
您是否想阻止後續連接實現(1)和(2a(業務邏輯)),或者只是忽略(2b(插入行))的冗餘計算? –
我需要避免在表B中創建副本,或者至少檢測副本並通過回滾事務來清除副本。 B不具有A的鍵,因爲從A到B的關係可以是多對一。 – Trent