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