即使删除了所有行、Trunc数据表和DBCC种子,也会自动增加具有重复主键的标识错误



SQL Server。最初的问题是标识主键的自动增量值达到2147483647。因此,我删除了所有的表行(它只包含临时工作值(,并指示DBA运行

DBCC CHECKIDENT (TableName, RESEED, 1);

这似乎奏效了,我的久经考验的应用程序能够在遇到错误之前用大约19300行填充表格:

违反PRIMARY KEY约束。无法在对象中插入重复密钥

我转到了一个开发服务器,运行了DBCC CHECKIDENT RESET命令。同一程序在达到2时添加行时出错。我可以使用SSMS手动插入行,而不是通过编程方式。程序的插入命令不引用主键列。

我已经尝试删除所有行,重新设置种子为0,运行trunk命令,但编程插入仍然会遇到SQL Server坚称存在的相同主键值,即使它不存在。

好吧,我承认这听起来像是一个应用程序,但为什么我会在没有记录的同一个表中遇到主键冲突。

更正后的重构插入代码为:重构插入查询为:

INSERT INTO [Ur_Imported_CourseEnroll] ([source], [role],[row_status], [external_course_key], [notes],[registration_status_refid], [snapshotGuid], [external_person_key])    
VALUES ('urstudent', 'Student', 'ENABLED', 'COURSE_SECTION-3-102090', 'source file: StudEnroll_URSTUDENT', 'COMPLETED', 'c38cb97928a6466395e92af996e91908', '31730266')

早期的副本确实包含一个错误的逗号(复制粘贴错误(。

没有触发器或外键。有默认值和主键约束。

清理后的应用程序的连接字符串为:

Data Source=SERVERNAME.edu;Initial Catalog=BbLmDataImports;User ID=DBUSER;Password=DBPASSWORD" 
providerName="System.Data.SqlClient"

完整的错误消息显示:

违反PRIMARY KEY约束"PK_Ur_Imported_CurseEnroll"。无法在对象"dbo.Ur_Imported_CourseEnroll"中插入重复的密钥。重复的密钥值为(10(。语句已终止。

如果我通过SQLServerManagementStudio添加一行,则引用的键值确实会增加。因此,我确信该应用程序正在寻址与SQLServerManagementStudio相同的服务器、数据库和表。

我意识到所涉及的表格非常";独立的";没有外部数据密钥或触发器。因此,我尝试了一个实验,并使用修改后的";创建";SQL Server Management Studio中的脚本。然后我更改了应用程序代码以引用新的表名。一切正常。这不是一场胜利,因为我不确定发生了什么,但我会接受这场平局。

我意识到所涉及的表非常"独立的";没有外部数据密钥或触发器。因此,我尝试了一个实验,并使用修改后的";创建";SQL Server管理器中的脚本。然后我更改了应用程序代码以引用新的表名。一切正常。这不是一场胜利,因为我不确定发生了什么,但我会接受这场平局。

最新更新