我正在使用 SQL Server 2005...
我想用触发器来监视 table1 的更新。发生此更新时,我将检查另一个表(表 2),使用表 2 中的数据将一个项目放入队列中,以便在将来的可变日期执行。可能是从现在起 10 秒,或者 2 小时,这个日期是通过检查表 2 中的数据确定的。在处理放入队列中的项目之前,table1 的触发器有可能再次执行。在这种情况下,需要删除队列中的项目,并将新项目放入队列中。
流程:
表1已更新 table1 的触发器触发并查询 table2 以确定时间戳。该时间戳和代码将添加到队列中。有东西监视该队列并在确定的时间戳处执行代码。如果在从队列中检索项目之前更新了 table1,则该项目将被删除,并将新项目添加到队列中。
是否有一个消息传递服务可以监视日期并在该日期执行,或者我应该在每次触发此触发器时创建一个新的 sql 作业?或者还有其他选择吗?这需要可扩展。
我希望我能够解释我的问题,如果您有任何疑问,请告诉我。感谢您提供的任何帮助。
您看过SQL Server Service Broker吗?
更新:您可以设置消息优先级,但我认为您无法在特定日期之前本地提取。除了根据定义,如果您将两条消息放入队列中,最旧的消息将首先从队列中“弹出”,即它们按升序日期顺序删除。
SQL-Server 代理作业通常用于在特定日期/时间执行任务。我认为可以使用 sp 创建或修改作业,因此您可以在触发器中使用它们。不利的一面是,可能存在一些权限问题。触发触发器的用户必须具有创建/修改作业的权限。