我想知道当进程正在进行时我们如何控制SQL中的触发器。 示例:如果对表(Employee Table)执行任何更新,删除,插入操作,那么我正在执行位于Windows驱动器中的批处理文件。批处理文件大约需要5分钟才能完成整个过程。所以我的问题是假设我有一个连接到同一个表(Employee Table)的多个应用程序,如果在Application上执行了不同的表,并且由于触发了批处理过程的启动。同时,从另一个应用程序再执行一次操作,然后再次触发批处理文件。由于性能降低或崩溃。
所以在这里我想知道有没有办法控制触发器。例如,在批处理文件完成该过程之前,第二个触发器保持不变,完成后需要再次启动该过程。
答案 0 :(得分:0)
你可以有一个帮助表,你的sp检查是否运行= 0,如果是,写入1并批量启动。批处理结束时,设置running = 0。
答案 1 :(得分:0)
呃 - 有一个数据库触发器在服务器上执行批处理脚本听起来像一个可怕的想法。它需要5分钟!!! ????你几乎放弃了并发的想法,它听起来不像一个非常稳定的系统。
但假设你真的想继续这个设计。我建议在表上执行DML的 任何 进程应该在执行DML之前在表上建立一个独占锁。在SQL Server上完成 DML之后,你的触发器总是被执行,我怀疑为时已晚。
我建议您强制该表上的所有DML通过始终建立表锁的存储过程,然后再继续。因此,保证您的操作被序列化,您的批处理脚本在任何给定时间都不会执行多次,并且并发请求将排队。
您可以通过向拥有存储过程的单个帐户授予写入权限来限制对表的写访问权限,然后将过程的执行权限授予适当的用户/角色。
实际上,我建议你完全放弃你的设计。但我无法提出替代方案,因为我不知道是什么导致了您当前的设计