簡體   English   中英

違反主鍵約束讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM