chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
-- =====================================================
|
||||
-- SignUp 序號管理工具集
|
||||
-- 提供多種場景的序號管理 SQL 腳本
|
||||
-- =====================================================
|
||||
|
||||
-- =============================================================
|
||||
-- 【場景1】初始化所有未設定序號的記錄
|
||||
-- =============================================================
|
||||
-- 執行此腳本可為 SeqNo = 0 或 NULL 的記錄自動補充序號
|
||||
|
||||
/*
|
||||
DECLARE @UpdatedCount INT;
|
||||
|
||||
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
|
||||
WHERE SeqNo = 0 OR SeqNo IS NULL
|
||||
) rn ON su.ID = rn.ID
|
||||
WHERE su.SeqNo = 0 OR su.SeqNo IS NULL;
|
||||
|
||||
SET @UpdatedCount = @@ROWCOUNT;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SELECT CONCAT('成功更新 ', @UpdatedCount, ' 筆記錄的序號') AS [結果];
|
||||
*/
|
||||
|
||||
-- =============================================================
|
||||
-- 【場景2】重新編號特定活動的所有參加人員
|
||||
-- 用途:當某個活動的序號亂掉時,重新編號
|
||||
-- =============================================================
|
||||
|
||||
/*
|
||||
DECLARE @CourseID INT = 1; -- 修改為要重新編號的活動編號
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
UPDATE SignUp
|
||||
SET SeqNo = rn.RowNum
|
||||
FROM SignUp su
|
||||
INNER JOIN (
|
||||
SELECT
|
||||
ID,
|
||||
ROW_NUMBER() OVER (ORDER BY ID ASC) AS RowNum
|
||||
FROM SignUp
|
||||
WHERE CourseID = @CourseID
|
||||
) rn ON su.ID = rn.ID
|
||||
WHERE su.CourseID = @CourseID;
|
||||
|
||||
SELECT CONCAT('活動 ', @CourseID, ' 的序號已重新編號') AS [結果];
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
*/
|
||||
|
||||
-- =============================================================
|
||||
-- 【場景3】檢查序號異常
|
||||
-- =============================================================
|
||||
|
||||
-- 查看所有序號為 0 或 NULL 的記錄
|
||||
SELECT
|
||||
ID,
|
||||
CourseID,
|
||||
Name,
|
||||
Mobile,
|
||||
SeqNo
|
||||
FROM SignUp
|
||||
WHERE SeqNo = 0 OR SeqNo IS NULL
|
||||
ORDER BY CourseID, ID;
|
||||
|
||||
-- 查看序號重複的記錄
|
||||
SELECT
|
||||
CourseID,
|
||||
SeqNo,
|
||||
COUNT(*) AS [重複數],
|
||||
STRING_AGG(CAST(ID AS VARCHAR), ',') AS [重複的ID]
|
||||
FROM SignUp
|
||||
WHERE SeqNo > 0
|
||||
GROUP BY CourseID, SeqNo
|
||||
HAVING COUNT(*) > 1
|
||||
ORDER BY CourseID, SeqNo;
|
||||
|
||||
-- 查看序號不連續的活動
|
||||
SELECT
|
||||
CourseID,
|
||||
COUNT(*) AS [總筆數],
|
||||
MIN(SeqNo) AS [最小序號],
|
||||
MAX(SeqNo) AS [最大序號]
|
||||
FROM SignUp
|
||||
WHERE SeqNo > 0
|
||||
GROUP BY CourseID
|
||||
HAVING MAX(SeqNo) > COUNT(*)
|
||||
ORDER BY CourseID;
|
||||
|
||||
-- =============================================================
|
||||
-- 【場景4】統計各活動的序號分佈
|
||||
-- =============================================================
|
||||
|
||||
SELECT
|
||||
c.ID AS [活動編號],
|
||||
c.CourseName AS [活動名稱],
|
||||
COUNT(s.ID) AS [參加人數],
|
||||
CASE
|
||||
WHEN COUNT(s.ID) = 0 THEN '無人員'
|
||||
WHEN MAX(s.SeqNo) = COUNT(s.ID) THEN '✓ 序號正常'
|
||||
ELSE '✗ 序號異常'
|
||||
END AS [序號狀態],
|
||||
MIN(s.SeqNo) AS [最小序號],
|
||||
MAX(s.SeqNo) AS [最大序號]
|
||||
FROM Classes c
|
||||
LEFT JOIN SignUp s ON c.ID = s.CourseID
|
||||
GROUP BY c.ID, c.CourseName
|
||||
ORDER BY c.ID;
|
||||
|
||||
-- =============================================================
|
||||
-- 【場景5】修復所有序號異常
|
||||
-- 說明:將所有 SeqNo <= 0 的記錄重新編號
|
||||
-- 警告:這會修改所有未正確設定序號的記錄
|
||||
-- =============================================================
|
||||
|
||||
/*
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @CourseID INT;
|
||||
DECLARE @CurrentCourseID INT;
|
||||
DECLARE @RowNum INT;
|
||||
|
||||
-- 建立暫時表存儲要更新的ID和新序號
|
||||
CREATE TABLE #TempUpdate (
|
||||
ID INT,
|
||||
NewSeqNo INT
|
||||
);
|
||||
|
||||
-- 為每個活動中 SeqNo <= 0 的記錄分配新序號
|
||||
INSERT INTO #TempUpdate (ID, NewSeqNo)
|
||||
SELECT
|
||||
ID,
|
||||
ROW_NUMBER() OVER (PARTITION BY CourseID ORDER BY ID ASC) +
|
||||
ISNULL((
|
||||
SELECT MAX(SeqNo)
|
||||
FROM SignUp s2
|
||||
WHERE s2.CourseID = s1.CourseID AND s1.SeqNo > 0
|
||||
), 0) AS NewSeqNo
|
||||
FROM SignUp s1
|
||||
WHERE s1.SeqNo = 0 OR s1.SeqNo IS NULL;
|
||||
|
||||
-- 執行更新
|
||||
UPDATE SignUp
|
||||
SET SeqNo = tu.NewSeqNo
|
||||
FROM SignUp su
|
||||
INNER JOIN #TempUpdate tu ON su.ID = tu.ID;
|
||||
|
||||
-- 清理暫時表
|
||||
DROP TABLE #TempUpdate;
|
||||
|
||||
SELECT '序號修復完成' AS [操作結果];
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
*/
|
||||
|
||||
-- =============================================================
|
||||
-- 【場景6】數據備份檢查
|
||||
-- 執行本腳本前,建議先備份資料
|
||||
-- =============================================================
|
||||
|
||||
-- 查看 SignUp_BAK 表中最近的備份記錄
|
||||
SELECT TOP 100
|
||||
ID,
|
||||
CourseID,
|
||||
SeqNo,
|
||||
Name,
|
||||
Mobile,
|
||||
DB_TRMOD,
|
||||
DB_TRDAT,
|
||||
DB_TRUSR
|
||||
FROM SignUp_BAK
|
||||
ORDER BY DB_TRDAT DESC;
|
||||
|
||||
-- 統計備份記錄數
|
||||
SELECT
|
||||
DB_TRMOD AS [操作類型],
|
||||
COUNT(*) AS [備份筆數],
|
||||
MAX(DB_TRDAT) AS [最近更新時間]
|
||||
FROM SignUp_BAK
|
||||
GROUP BY DB_TRMOD
|
||||
ORDER BY MAX(DB_TRDAT) DESC;
|
||||
Reference in New Issue
Block a user