我正在尝试提高 SQL Server 2000 作业的性能。这是场景:
表A
有最大值。300,000 行。如果我更新/删除第 100 行(基于插入时间)在该行之后添加的所有行,应该更新它们的值。行号 101,应根据行号更新其值。100 和行号。102 应根据第 101 行的更新值更新其值。例如
旧表:
ID...........Value
100..........220
101..........(220/2) = 110
102..........(110/2)=55
......................
第 100 行更新为新值:300。
新表
ID...........Value
100..........300
101..........(300/2) = 150
102..........(150/2)=75
......................
实际值计算更复杂。该公式是为了简单起见。
现在,为更新/删除语句定义了一个触发器。更新或删除行时,触发器会将行的数据添加到日志表中。此外,在更新/删除之后在代码隐藏中创建了一个 SQL 作业,该作业触发一个存储过程,该存储过程最终遍历表的所有下一行A
并更新它们的值。该过程需要大约 10 天才能完成 300,000 行。
当 SP 被触发时,它会更新下一行的值。我认为这会导致触发器为每个 SP 更新再次运行,并将这些行也添加到日志表中。此外,该任务应根据客户的要求在数据库端完成。
解决问题:
修改存储过程,直接从触发器调用。然后存储过程删除触发器并更新下一行的值,然后再次创建触发器。
- 将有多个程序实例同时运行。如果另一个用户在执行 SP 时修改了一行,系统将不会触发触发器,我会遇到麻烦!有什么解决方法吗?
- 您对此解决方案有何看法?有没有更好的方法来实现这一目标?
谢谢你。