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