這個問題是關於併發高速插入。 我必須承認在我眼裏這很有趣。在執行插入觸發器之後,如何強制插入觸發器之後立即執行插入觸發器?
我正在使用SQL Server 2008 R2執行T-SQL插入和插入觸發器之後。
我想確保在插入和它的插入後觸發器之間不會執行任何命令。
使用隔離級別會導致死鎖或只是不是解決問題。
我正在使用的程序是由菲爾的答案/解決方案 SQL Server dependent Identity - is there such a thing?
的問題是:
有時插入得到在上次插入其插入後觸發之間,造成這一結果:
RoomID ItemID ItemDescription ID
------ ------ --------------- --
7 1 Door 1
7 2 Window (West) 2
7 3 Window (North) 3
8 1 Door 4
8 2 Table #1 5
8 3 Table #2 6
7 4 Table #1 7
8 4 Chair #1 8
7 6 Table #2 9
7 5 Table #3 10
8 5 Chair #2 11
查看ID#9和#10。 Thair ItemID被切換。 ItemID應該分別爲5和6,而不是6和5,但第10次插入可能發生在#9的插入後觸發完成執行之前。
此問題發生率小於插入的0.5%:2個開關涉及1000個插入或更少的4個記錄。是的,有時候沒有交換機發生。
提高一個步長的隔離級別沒有幫助,甚至會造成更多的鍵/從屬按鍵開關不時。提高兩個隔離級別造成了僵局。
降低隔離級別會減少交換機,但它們仍然被創建。
起上調隔離級別的每次插入和搬回在觸發結束默認的隔離級別導致死鎖之前(在我的實驗中所有插入沒有犯!)。
有人看到出路嗎?
如何強制插入及其插入後觸發器一起執行,禁止其他插入到同一個表之間?
目前還不清楚ItemID是什麼或做什麼。你可以使用計算列來找到它,而不是'觸發器之後? –
另外,在SQL 2012中,您可以使用一個序列。 –
您可以向我們展示......插入前的表格「1」。 '2'插入自己,和他們的順序。 '3'觸發器中的代碼。 – MatBailie