我有一個 asp.net webforms 應用程式,學生可以在其中填寫表格并提交。然后將學生資訊保存到資料庫中。有一個系統可以自動生成他們的學術卷號。為了完成這項任務,我創建了一個單獨的表,其中只有一個名為“LastRollNumber”的列。該表還有一個 ID 列。該表始終只有一行。因此,如果學生承認自己,那么在提交表格后,應用程式將檢查表格的最后卷號,并將添加 1 并更新表格。我使用以下 SQL 來做到這一點:
"UPDATE [dbo].[AcademicRollData] SET [LastRollNumber] = [LastRollNumber] 1 OUTPUT inserted.LastRollNumber WHERE [ID]=1;"
許多學生正在訪問該應用程式。該應用程式運行良好,但丟失了一些rollnumber。卷號沒有重復,但有時會丟失。我做錯了什么?完成這項任務的最佳方法是什么?請幫助我提供有價值的答案以解決問題。
謝謝。
uj5u.com熱心網友回復:
你試過 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)
uj5u.com熱心網友回復:
根據我的理解,您不需要創建單獨的表來生成卷號。推薦的方法是使用 max() 1。此外,您可以使列唯一且不為空,以避免重復值和空值。還要鎖定表或使用事務范圍。
要插入的示例查詢
INSERT INTO [dbo].[AcademicRollData]
( rollNumber, column1, otherColumn )
VALUES
((SELECT MAX( rollNumber ) 1 FROM [dbo].[AcademicRollData] acaRollData),
'value1', 'value')
在這種情況下,您不需要運行額外的更新查詢。
如果理解您的目的,請告訴我。
uj5u.com熱心網友回復:
在 SQL Server 中,您可以使用在 1 處指定的種子自動遞增的標識列。您還可以在 Oracle 和 SQL Server 中使用序列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430003.html
上一篇:CORS:對預檢請求的回應未通過訪問控制檢查:它沒有HTTPok狀態
下一篇:按鈕單擊的回發問題
