[英]Violation of Primary Key Constraint on Read
我有一個具有許多數據訪問方法的Web服務。 此特定方法僅讀取數據。 它不執行任何插入,更新,並且不執行任何觸發器來引起插入或更新。 我們有一個錯誤報告,該錯誤記錄為違反主鍵約束的。 如我之前所說,此方法不會插入任何內容。 這是調用堆棧:
The METHOD_NAME() method failed with an unhandled exception.
[EXCEPTIONS] #1:SqlException(Violation of PRIMARY KEY constraint 'CONSTRAINT_NAME'. Cannot insert duplicate key in object 'dbo.TABLE_NAME'.
The statement has been terminated.) [SITE] Logged in Anon.DLL [DETAILS] Level=Error
[STACK] at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at Anon.DataAccess.Common.DataAccessBase`4.ExecuteReader() in Anon\DataAccessBase.cs:line 183
at Anon.DataAccess.GetSomething() in Anon\SomethingDal.cs:line 31
at Anon.Service.Manager.GetSomething() in Anon\Manager.cs:line 53
at Anon.WebService.GetSomething() in Anon\WebService.asmx.cs:line 47
此服務中還有其他方法可能會產生該錯誤,但是必須分別調用它們。 僅讀取時如何獲得插入錯誤。 這兩種方法是否可能同時運行,並且錯誤被報告給錯誤的連接?
這可以在99.9999%的時間內正常工作,但是這一次有些事情發生了。
肯定會插入違反pk約束的內容。 它可以是使用情況日志,錯誤日志或其他某種審計表,其目的是記錄存儲過程的使用情況。 它也可能是您希望只讀的查詢所調用的函數或存儲過程。
通常,插入主鍵不是一個好主意,而是讓它在數據庫端自動遞增。 您可以調用一個系統變量來獲取由查詢創建的鍵的ID。
但是實際上,根據您要嘗試執行的操作,可以使用不同的方法來解決此問題。
最后,您的程序邏輯出了一些問題,因為它試圖將非唯一值插入唯一列中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.