我有2個表 - 主表和詳細表。主表的ID列是主鍵和自動ID。我有一個SP將記錄插入到兩個表中。在這個SP中,當在主表中插入一個記錄ID時,current_ident被提取並存儲在一個變量中,然後該變量被傳遞到詳細表中插入詳細記錄。當交易一個接一個地完成時,這是非常正常的。但是,當多個用戶同時創建交易時,有時一個交易的詳細記錄正在插入其他交易,這是一件危險的事情。請幫我解決這個問題。併發問題在SQL Server 2008中
回答
在這種情況下,我會使用SCOPE_IDENTITY()
。
這是正確的。它工作。非常感謝您的及時幫助 – 2010-10-05 11:30:31
您是否正確地設置了交易記錄?你的SP應該是這個樣子
BEGIN TRAN
DECLARE @id INT
INSERT INTO Master (x, y , z) ...
SELECT @id = @@identity
INSERT INTO Child (id, foo, bar) VALUES (@id, ...
COMMIT TRAN
RETURN 0
:Err
ROLLBACK
RETURN 1
假設這是正確的,你需要檢查你的服務器的默認隔離級別,以及連接的隔離級別執行的存儲過程,但它更可能在一個錯誤)SP
例如,如果表上的觸發器向另一個表插入數據,則不會返回錯誤結果的「@@ identity」。 – 2010-08-18 12:58:06
使用SCOPE_IDENTITY()(返回插入同一範圍內的標識列的最後一個標識值。範圍是一個模塊:存儲過程,觸發器,函數或批處理。)而不是@@ IDENTITY。
伊戈爾,非常感謝這些信息。我已使用SCOPE_IDENTITY()代替Ident_Current並將其部署到實時服務器上。我將不得不等待一個星期才能知道這個問題是否已經解決。我們很少會在服務器上看到這個錯誤。 非常感謝您的意見。 – 2010-08-24 12:46:59
@Geeta K. welcome! – garik 2010-08-24 19:01:07
- 1. 併發在SQL Server 2008
- 2. SQL Server 2008問題
- 3. SQL Server 2008中的問題
- 4. SQL Server併發問題
- 5. 查詢問題在SQL Server 2008中
- 6. SQL Server 2008安裝問題
- 7. SQL Server 2008 Native Client問題
- 8. SQL Server 2008死鎖問題
- 9. Sql Server 2008 CDC問題
- 10. VBScript和SQL Server 2008問題
- 11. SQL Server 2008複製問題
- 12. SQL Server 2008權限問題
- 13. SQL-Server的2008:XML問題
- 14. sql server express 2008問題
- 15. SQL Server 2008連接問題
- 16. SQL Server 2008性能問題
- 17. ConnectionString問題 - Windows 2008上的SQL Server 2008
- 18. HAVING SQL Server 2008中的子句問題
- 19. SQL Server 2008中表類型的問題
- 20. SQL Server 2008中的文件組問題
- 21. SQL Server 2008中的編碼問題
- 22. SQL Server 2008中選擇問題
- 23. SQL Server 2008中的事務問題
- 24. 在SQL Server 2008上的權利問題
- 25. T-SQL CTE問題(SQL Server 2008)
- 26. Sql Server 2008遠程訪問問題
- 27. 通過SQL Server 2008中的sp_OAMethod發送SMS中的問題
- 28. SQL Server 2008中合併
- 29. 合併在SQL Server 2008 R2
- 30. SQL Server 2008中創建/最後更新的觸發問題
你能顯示你的存儲過程腳本嗎? – garik 2010-08-18 12:51:05