在执行多个查询时,如何锁定对特定表的写入?

时间:2018-06-14 22:27:53

标签: sql sql-server sql-server-2012

我在我的sql server中设置了一个表,用于跟踪已更改的库存项(在另一个数据库中)。该表由几个不同的触发器提供。计划任务每​​隔15分钟运行一个批处理文件,该文件执行许多不同的查询,这些查询会发送此表中标记的项目的更新,以更新多个电子商务网站。批处理文件中的最后一个查询将重置标志。

您可以想象,如果在批处理文件运行时标记了某个项目,则可能会丢失更改。我通过每24小时重播最近25小时的更新来解决这个问题,以防这种情况发生。它有效,但IMO有点笨拙。

我想要做的是延迟对该表的任何写入,直到我的脚本完成,并重置脚本启动时标记的所有行上的标志。然后允许所有这些延迟写入发生。

我已经考虑过使用表提示(TABLOCK),但这似乎仅限于一个查询 - 除非我误解了我所读过的内容,这当然是可能的。我有几个连续运行。 TIA。

1 个答案:

答案 0 :(得分:0)

亚历 您是否可以将脚本修改为存储过程,该存储过程使用将锁定应用于生产表的select语句将所有数据提取到临时表中。然后,您可以将锁定放在主表上,并在临时表(或为此目的构建的永久表)中进行所有处理,使其远离实时系统。它会慢得多,并且会给你的SQL框带来更多的负担,但如果你有一个时间点快照,速度不应该是一个问题。

如果该选项不适用,那么也许您可以在事务中包装整个事物并使用第一个select语句将表锁定放在生产表上。

祝你好运伴侣