-- ===================================================== -- 初始化 SignUp 表的序號 (SeqNo) -- 用途:為現有的參加人員記錄補充序號 -- 說明:按活動(CourseID)和ID排序,為每個活動內的參加人員自動編號 -- ===================================================== -- 方式一:使用 ROW_NUMBER() - 推薦(支援 SQL Server 2005+) -- 此方式會為每個活動內的記錄按 ID 順序編號 BEGIN TRANSACTION; UPDATE SignUp SET SeqNo = rn.RowNum FROM SignUp su INNER JOIN ( SELECT ID, ROW_NUMBER() OVER (PARTITION BY CourseID ORDER BY ID ASC) AS RowNum FROM SignUp ) rn ON su.ID = rn.ID WHERE su.SeqNo = 0 OR su.SeqNo IS NULL; -- 顯示更新結果 SELECT '序號更新完成' AS [操作結果]; SELECT CourseID, COUNT(*) AS [人數], MIN(SeqNo) AS [最小序號], MAX(SeqNo) AS [最大序號] FROM SignUp WHERE SeqNo > 0 GROUP BY CourseID ORDER BY CourseID; COMMIT TRANSACTION; -- ===================================================== -- 驗證結果 -- ===================================================== -- 查看更新後的資料 SELECT ID, CourseID, SeqNo, Name, Mobile, CheckInTime, CheckOutTime FROM SignUp ORDER BY CourseID ASC, SeqNo ASC; -- 檢查是否有未設定序號的記錄 SELECT ID, CourseID, Name, Mobile FROM SignUp WHERE SeqNo = 0 OR SeqNo IS NULL ORDER BY CourseID, ID; -- 檢查序號是否重複 SELECT CourseID, SeqNo, COUNT(*) AS [重複次數] FROM SignUp WHERE SeqNo > 0 GROUP BY CourseID, SeqNo HAVING COUNT(*) > 1 ORDER BY CourseID, SeqNo;