所以我有這個存儲過程來插入一條消息到我的數據庫。我想阻止用戶在短時間內發佈重複郵件,無論是意外還是故意(無論是延遲連接還是垃圾郵件發送者)。防止在SQL Server中的重複記錄
這是插入語句是什麼樣子:
IF NOT EXISTS (SELECT * FROM tblMessages WHERE message = @message and ip = @ip and datediff(minute,timestamp, getdate()) < 10)
BEGIN
INSERT INTO tblMessages (ip, message, votes, latitude, longitude, location, timestamp, flags, deleted, username, parentId)
VALUES (@ip, @message, 0, @latitude, @longitude, @location, GETDATE(), 0, 0, @username, @parentId)
END
你可以看到我檢查,看看是否同一用戶已張貼在10分鐘內相同的消息,如果沒有,我將它張貼。我仍然看到昨天有一個重複。當我檢查數據庫中兩條消息的時間戳時,它們完全一樣,直到第二條,所以我猜測每次插入時運行這個「存在」檢查時,都返回空,所以它們都插入正確(在基本上相同的時間)。
什麼是我可以防止這種情況發生的正確方法?
這會識別一條消息在同一時間發佈? – slandau
@slandau:是的,會的。看到我的更新請 – gbn
我認爲這是最好的解決方案。 - 我不需要提出錯誤的權利?我可以平靜地回滾? – slandau