專案剛上線時各項目票數為零,為展現一定人氣需為每個項目隨機賦予初始票數,且數值不可相同以免被察覺。使用遊標逐行處理可靈活控制每筆記錄的更新邏輯。
DECLARE @Id VARCHAR(50);
DECLARE My_Cursor CURSOR
FOR SELECT Id FROM dbo.kinpanAwardProject WHERE session = 9;
OPEN My_Cursor;
FETCH NEXT FROM My_Cursor INTO @Id;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @Id; -- 除錯用,可移除
UPDATE dbo.kinpanAwardProject
SET ProTicketCount = CAST(FLOOR(RAND() * 30) AS INT) + 40
WHERE Id = @Id;
FETCH NEXT FROM My_Cursor INTO @Id;
END
CLOSE My_Cursor;
DEALLOCATE My_Cursor;
GO
關鍵點: 使用 RAND() 產生 40~69 之間的隨機整數,配合 WHERE Id = @Id 精確定位單筆記錄更新。
DECLARE My_Cursor CURSOR
FOR SELECT * FROM dbo.MemberAccount;
OPEN My_Cursor;
FETCH NEXT FROM My_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
-- UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor;
-- DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor;
FETCH NEXT FROM My_Cursor;
END
CLOSE My_Cursor;
DEALLOCATE My_Cursor;
GO
優勢: 無需額外宣告變數接收主鍵,亦無需撰寫 WHERE 條件,直接對遊標當前行操作,程式碼更簡潔、效能略佳。適用於不需複雜條件判斷、單純遍歷更新/刪除的場景。
CLOSE 與 DEALLOCATE 釋放資源,避免記憶體洩漏。FAST_FORWARD、READ_ONLY 等選項可進一步優化唯讀、單向遊標的效能。