ASP 代碼:
sql = "SELECT SUM(usetime) AS usetime FROM TblCharinfoTimeLog WHERE charid='123'"
rs.Open sql, conn, 1, 2 ' adOpenKeyset, adLockOptimistic
rs("usetime") = rs("usetime") - 10 ' 嘗試修改聚合結果
rs.Update ' 無效果,數據庫未變
若需扣減某用戶總在線時間 10 分鐘,**必須更新明細表中的具體記錄**,而非聚合結果。
sql = "SELECT id, usetime FROM TblCharinfoTimeLog WHERE charid='123'"
rs.Open sql, conn, 1, 2
Do While Not rs.EOF
rs("usetime") = rs("usetime") - 10 / rs.RecordCount ' 平均分配扣減
rs.Update
rs.MoveNext
Loop
' 扣減最新一條 (按時間倒序)
sql = "SELECT TOP 1 id, usetime FROM TblCharinfoTimeLog WHERE charid='123' ORDER BY logtime DESC"
rs.Open sql, conn, 1, 2
If Not rs.EOF Then
rs("usetime") = rs("usetime") - 10
rs.Update
End If
-- SQL Server 預存過程
CREATE PROC sp_DeductOnlineTime @charid VARCHAR(20), @minutes INT
AS
BEGIN
UPDATE TOP (1) TblCharinfoTimeLog
SET usetime = usetime - @minutes
WHERE charid = @charid AND usetime >= @minutes; -- 防止負數
END
ASP 調用:`conn.Execute "sp_DeductOnlineTime '123', 10"`