我已經創建了一個系統,每天通過SMS向我們的客戶發送一些信息。因爲發送SMS的過程可能需要一段時間,這是由多個進程完成的,每個進程發送的SMS數量有限。當一個進程讀取多個pohne nubers記錄(可以說有1000個)發送短信。我想標記這1000條記錄,其他進程也不會讀取這些記錄。如何標記在mssql中讀取的記錄
Select Top(1000) ID, Number from Phones where isactive = 1 and isverified = 1
我需要一些代碼,不會是這樣的:
現在我想這些記錄的列ReadTime
更新爲getdate()
,以確保
update Phones, set ReadTime = getdate() where
(上面選擇),其他schduled過程將不會再讀他們(我設置日期時間標誌,而不是位標誌的原因是,某些短信發送可能會失敗,這種方式我可以理解哪些是很久以前閱讀,但沒有更新發送時間)
在發送短信之後標記它們(無論如何要寫入發送時間)都不會起作用,因爲處理髮送SMS的預定記錄將一次讀取所有1000條記錄,並且可能會有記錄被讀取其他進程,但還沒有爆發(因爲短信尚未發送)。
如何確保所選行與您更新的行相同? –
@ t-clausen.dk實際上它會更新相同的記錄,如果添加了一個篩選器以包含它按預期工作的日期。 – Taryn
您正在更新1000行,但這1000行並不總是與問題中選擇的行相同。因此,當您的查詢出錯時 –