gpt4 book ai didi

c# - 如何标记在mssql中读取的记录

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:02 25 4
gpt4 key购买 nike

我创建了一个系统,每天通过 SMS 向我们的客户发送一些信息。由于发送 SMS 的过程可能需要一段时间,这是由多个进程完成的,每个进程发送有限数量的 SMS。当一个进程读取大量 pohne nubers 的记录(比如说其中的 1000 条)以发送短信时。我想标记这 1000 条记录,其他进程也不会读取这些记录。

Select Top(1000) ID, Number from Phones where isactive = 1 and isverified = 1

我需要一些代码来做这样的事情:

update Phones, set ReadTime = getdate() where(上面选择的)

现在我想将这些记录的 ReadTime 列更新为 getdate() 以确保其他计划进程不会再次读取它们(我的原因我设置日期时间标志而不是位标志是因为某些 SMS 发送可能会失败,这样我就可以了解哪些是很久以前阅读但未更新发送时间的)

在发送短信后标记它们(无论如何都应该这样做以写入发送时间)不会有帮助,因为将处理发送短信的计划任务将立即读取所有 1000 条记录,并且可能有已读取的记录由其他进程但尚未标记(因为 SMS 尚未发送)。

最佳答案

你应该能够做这样的事情:

UPDATE Phones
SET ReadTime = GetDate()
WHERE ID IN (SELECT Top 1000 ID
FROM Phones
WHERE IsActive = 1
AND IsVerified = 1
AND ReadTime Is Null -- you will want to exclude any records already updated
ORDER BY ID)

参见SQL Fiddle with Demo

关于c# - 如何标记在mssql中读取的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12332434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com