我需要从 sql server 2005 实例(本地服务器)在 150 多个 sql server 实例(sql server 2000,远程)上手动运行作业。所有这些实例的工作都是相同的。该作业只是调用一个不带参数的存储过程,这在所有实例中也是相同的。这些工作按计划进行。但现在他们希望我根据要求手动运行所有实例或指定实例的作业。
对此的最佳做法是什么?我试过用 openrowset 来调用远程存储过程。但是每次运行作业都需要几分钟,所以如果我使用循环来运行所有这些作业,它将一个接一个地运行,而且时间很长。理想情况下,它应该能够在每个实例上运行存储过程,而无需等待它完成。更理想的是,它应该能够在每个实例上运行作业而无需等待它完成,因此它可以在每个实例的作业历史记录中留下记录。
并且存储过程来自第三方,因此无法更改。
更新:
由于“人们”要求从 SSRS 报告中对其进行初始化,因此使用 SSRS 在服务器上调用一些 T-SQL/proc 是最合适的。我现在遇到的问题是,当使用 OPENQUERY 或 OPENROWSET 从本地服务器调用远程 SQL Server 2000 实例上的 msdb.dbo.sp_start_job 时,我得到了无法跟随错误。
处理对象“exec msdb.dbo.sp_start_job @job_name = 'xxx'”。链接服务器“xxx”的 OLE DB 提供程序“SQLNCLI”表示该对象没有列,或者当前用户对该对象没有权限。
我想这可能是因为 sp_start_job 没有返回任何内容,因为我可以使用 OPENQUERY/OPENROWSET 毫无问题地调用其他远程过程。那么有什么解决方法吗?
更新:
我发现它在 t-sql 中实际上非常简单。
执行 [linkedServerName].msdb.dbo.sp_start_job @job_name = 'test2'
所以我不需要使用 OPENROWSET/OPENQUERY,因为所有远程 SQL Server 2000 实例都已添加为远程服务器。