'违反PRIMARY KEY约束'SQL错误

时间:2011-03-11 21:30:38

标签: 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" />
                )

2 个答案:

答案 0 :(得分:6)

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

  

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

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

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

ALTER TABLE tbl AUTO_INCREMENT = 10000

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

DBCC CHECKIDENT(tbl, RESEED, 9999)

答案 1 :(得分:-2)

在插入查询之前使用以下逻辑.... 从表中选择MAX(ID);
  string queryInsertStudent = String.Format(&#34;插入到tbStudent(studentName,fatherName,program,session,regNo,enrolNo,emailAddress,contactNo,CNIC,parmanentAddress,Status)值(&#39; {0}&#39; &#39; {1}&#39;,&#39; {2}&#39;,&#39; {3}&#39;,&#39; {4}&#39;,& #39; {5}&#39;,&#39; {6}&#39;,&#39; {7}&#39;,&#39; {8}&#39;&#39 ; {9}&#39;,&#39; {10}&#39;);&#34;,Student_Name,F_Name,Programe,Session,RegNo,EnrollNo,Email,Contact,CNIC,Address,Status);                 //以上&#34; string queryInsertStudent&#34;是数据表中数据插入的字符串数据类型查询                 ClassDatabaseConnection.Excute(queryInsertStudent); //这里&#34;执行是CLASS&#34; DatabaseConnectionClass&#34;&#34;下的方法                 string student_ID = ClassDatabaseConnection.select(&#34;从tbStudent中选择MAX(studentId)&#34;)。行[0] [0] .ToString();