'违反PRIMARY KEY约束'SQL错误

jsl*_*mka 2 sql-server coldfusion

这似乎是一个非常常见的问题,但到目前为止我所尝试的一切都没有解决方案.我正在为我的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" />
                )
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

我在你的问题中注意到这条特定的一行:

这发生在DEV环境中,其中数据已与当前数据合并.

手动将数据插入自动增量字段后,您可能需要将自动增量计数器重置为插入的最大ID后的内容.

如何执行此操作(以及是否需要)依赖于数据库.例如,在MySQL中,您可以使用ALTER TABLE语句:

ALTER TABLE tbl AUTO_INCREMENT = 10000
Run Code Online (Sandbox Code Playgroud)

重置SQL Server IDENTITY列的种子的等效命令是:

DBCC CHECKIDENT(tbl, RESEED, 9999)
Run Code Online (Sandbox Code Playgroud)

  • @jslamka - 只需运行`DBCC CHECKIDENT(your_table_name)`,它应该自动设置你需要的种子值,如果它不知何故不同步.但是你得到了什么语法错误?只要您使用实际的表名并具有适当的权限,该命令看起来就应该有效. (2认同)