这似乎是一个很常见的问题,但是,到目前为止我尝试过的所有方法都没有解决方案。我正在为我的 PK 使用 ID 字段,并且自动增量已打开。这种情况发生在数据已与当前数据合并的 DEV 环境中。
任何帮助将不胜感激。
我正在使用 SQL Server。我还运行了 DBCC CHECKIDENT([ceschema.ce_attendeeCredit]) 并且身份似乎正确排列。我认为游戏中可能存在更深层次的问题。
INSERT INTO tblpersonCredit
(
personID,
CreditID,
Amount,
ReferenceNo,
CreatedBy
)
VALUES
(
<cfqueryparam value="#arguments.AttendeeCredit.getAttendeeID()#" CFSQLType="cf_sql_integer" />,
<cfqueryparam value="#arguments.AttendeeCredit.getCreditID()#" CFSQLType="cf_sql_integer" />,
<cfqueryparam value="#arguments.AttendeeCredit.getAmount()#" CFSQLType="cf_sql_float" null="#not len(arguments.AttendeeCredit.getAmount())#" />,
<cfqueryparam value="#arguments.AttendeeCredit.getReferenceNo()#" CFSQLType="cf_sql_varchar" null="#not len(arguments.AttendeeCredit.getReferenceNo())#" />,
<cfqueryparam value="#arguments.AttendeeCredit.getCreatedBy()#" CFSQLType="cf_sql_integer" />
)
最佳答案
我注意到您问题中的这一行特定内容:
This is occurring in a DEV environment where data has been merged with the current data.
手动将数据插入自动增量字段后,您可能需要将自动增量计数器重置为插入的最大 ID 之后的值。
如何执行此操作(以及是否需要)取决于数据库。例如,在 MySQL 中,您可以使用 ALTER TABLE 语句:
ALTER TABLE tbl AUTO_INCREMENT = 10000
重置 SQL Server IDENTITY 列种子的等效命令是:
DBCC CHECKIDENT(tbl, RESEED, 9999)
关于sql-server - “违反主键约束”SQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5278588/