0

我环顾四周,发现了一些关于如何做到这一点的想法,但没有明确的最佳方法。其中一个想法是使用 sp_start_job 启动运行 DTS 包的 SQL Server 代理作业。如果这是最好的方法,那么下一个问题将是,“如何从作业中安排 DTS 包并使其不再重复?”

谢谢,蒂姆

4

3 回答 3

1

xp_cmdshell将允许您执行 dtsrun。

于 2008-10-31T00:04:42.560 回答
1

我不建议将这种功能绑定到触发器。触发器应该很快。我认为没有任何方法可以像想要的触发器那样快速启动 DTS 包。如果这引起了你的共鸣,那么我建议让你的触发器简单地将一行插入一个特殊的表中,然后根据你的目的(每分钟?每 10 秒?)执行一个作业来监视这个表并根据需要启动适当的 DTS 包。

于 2008-11-04T18:23:31.820 回答
0

我没有使用 xp_cmdshell,而是这样做了:

当表中的某个值发生更改时,触发器使用 msdb.sp_start_job 启动作业。此作业不应按计划运行,仅当由用户启动时。我将作业计划设置为运行一次,现在已成为过去,并且取消选中启用的框。

该作业有一个步骤,即 DTSRun /~Z0xHEXENCRYPTEDVALUE。DTS 包将一些行从该服务器复制到不同平台上的另一台服务器,并在成功时使用触发器重置表中的值以供下次使用。触发器在调用 sp_start_job 之前检查表值,以便作业仅在某些条件下启动,而不是每次启动。

由于 sp_start_job 异步运行,触发器很快完成。唯一的缺点是我需要轮询成功重置的值并让用户知道它有效,或者在一段时间后它不起作用。

如果我需要同步操作,另一种选择是使用 xp_cmdshell,这在触发器内部可能不是一个好主意。

于 2008-11-13T21:51:32.487 回答