我环顾四周,发现了一些关于如何做到这一点的想法,但没有明确的最佳方式。其中一个想法是使用sp_start_job启动运行DTS包的SQL Server代理作业。如果这是最好的方法,那么接下来的问题是,“如何从作业中安排DTS包并使其不再发生?”
谢谢, 添
答案 0 :(得分:1)
xp_cmdshell将允许您执行dtsrun。
答案 1 :(得分:1)
我不建议将此类功能绑定到触发器。触发器应该很快。我认为没有任何方法可以启动DTS包,其速度与 I 希望触发器一样快。如果这引起了你的共鸣,那么我建议让你的触发器只是在一个特殊的表中插入一行,然后有一个为你的目的(每分钟?每10秒?)监视这个表所需的频繁执行的工作并根据需要启动适当的DTS包。
答案 2 :(得分:0)
而不是使用xp_cmdshell,我这样做了:
当表中的某个值发生更改时,触发器使用msdb.sp_start_job来启动作业。只有在用户启动时,此作业才不应按计划运行。我将作业计划设置为运行一次,现在是过去的,我取消选中启用的框。
此作业有一步,即DTSRun / ~Z0xHEXENCRYPTEDVALUE。 DTS包将一些行从此服务器复制到另一个平台上的另一个服务器,并且成功时使用下次触发器重置表中的值。触发器在调用sp_start_job之前检查表值,以便作业仅在某些条件下启动,而不是每次都启动。
由于sp_start_job以异步方式运行,因此触发器会快速完成。唯一的缺点是我需要轮询成功时重置的值,并让用户知道它有效,或者在一段时间后,它不起作用。
如果我需要同步操作,那么替代方法是使用xp_cmdshell,这可能不是一个好主意从触发器内部。