我有一个asp.net webforms申请,在那里学生可以填写一份表格并提交。然后将学生信息保存到数据库中。有一个自动生成他们的学籍号码的系统。为了完成这项任务,我创建了一个单独的表,其中只有一个列名为"LastRollNumber“。该表还有一个ID列。这个表总是只有一行。因此,如果一名学生承认自己,那么在提交表格后,申请表将检查表格中的最后一卷号,并添加1并更新表格。我使用了以下SQL来执行此操作:
"UPDATE [dbo].[AcademicRollData] SET [LastRollNumber] = [LastRollNumber] +1 OUTPUT inserted.LastRollNumber WHERE [ID]=1;"许多学生正在访问应用程序。应用程序运行良好,但有些滚动号被遗漏了。没有重复的号码,但有时会丢失。我做错什么了?完成这项任务的最佳方法是什么?请帮助我拿出你宝贵的答案来解决这个问题。
谢谢。
发布于 2022-02-20 10:11:35
您试过scope_identity()吗?
dim cmd as sqlcommand=new sqlcommand("insert into table () values();SELECT CAST(scope_identity() AS int)",connection)
dim LastRollNumber as integer=cmd.ExecuteScalar
cmd=new sqlcommand("UPDATE [dbo].[AcademicRollData] SET [LastRollNumber] = " & LastRollNumber +1 & " WHERE [ID]=" & LastRollNumber",connection)发布于 2022-02-20 13:05:52
根据我的理解,您不需要创建一个单独的表来生成卷号。推荐的方法是使用max()+1。此外,您还可以使列是唯一的,而不是空的,以避免重复和空值。也可以锁定表或使用事务作用域。
要插入的示例查询
INSERT INTO [dbo].[AcademicRollData]
( rollNumber, column1, otherColumn )
VALUES
((SELECT MAX( rollNumber )+1 FROM [dbo].[AcademicRollData] acaRollData),
'value1', 'value')在这种情况下,您不需要运行额外的更新查询。
如果你明白你的目的,请告诉我。
发布于 2022-02-20 15:52:13
在Server中,可以使用标识列,该列使用在1处指定的种子自动递增,还可以在Oracle和Server中使用序列。
https://stackoverflow.com/questions/71193179
复制相似问题