2011-03-08 84 views
0

我聽說你不能先插入一行,並立即在SQL Server的同一個事務的下一條語句中更新它?但我一直這樣做(SQL Server 2005),我的結果顯示它已完成。我在這裏錯過了什麼或做了些什麼愚蠢的事情?請指教。謝謝。在同一個事務中插入和更新

+0

你能提供你使用的代碼嗎? – Ramy 2011-03-08 22:13:59

+0

你也有一個信息來源,這是不能做到的嗎? - 可能只是一個誤解。這當然不是我遇到過的問題。 – 2011-03-08 22:18:16

+0

在SQL Server 2008引入[MERGE]之前,您可能會考慮[有關upserts的問題](http://samsaffron.com/blog/archive/2007/04/04/14.aspx)(http:// technet.microsoft.com/en-us/library/bb510625.aspx)聲明。 – 2011-03-08 22:22:31

回答

1

根據我的經驗,如果插入的數量相對較高,則在相同查詢中插入和更新可能會導致鎖定查詢。我會考慮創建觸發器插入和修改值插入之前。不知道這種方法對你的情況有多相關。但話雖如此,在相同的查詢中插入和更新是絕對有可能的。

+0

是的,你可能是對的!此外,我可以使用Output子句來避免觸發器。但我只是想確定這是否可能(在同一交易中插入和更新)。另外,如果我需要新插入行的身份值進行進一步處理,我可以更好地使用 - SCOPE_IDENTITY()而不是採用MAX(id)...我希望這也是一個正確的方法。謝謝你們回覆。我還沒有結束這個問題,因爲我可能會得到一些有趣的評論/評論。 – Tintin 2011-03-08 22:31:32

+1

DECLARE @LastRecordID int 執行插入 SET @LastRecordID = @@ IDENTITY UPDATE表SET列=值WHERE ID = @ LastRecordID – Dimitri 2011-03-08 22:36:03

相關問題