2

我正在尝试创建一个 SQL 作业,该作业位于我喜欢称之为维护服务器的位置,所有其他服务器数据库的详细信息都位于该服务器上。所以我有一个存储过程来收集我拥有的所有必需数据,这个存储过程现在位于 MaintenanceServer.MaintenanceDB.pr_MyProcedure 中。

现在我想做的是。我在我的维护服务器上创建链接服务器,它指向我想维护的所有其他服务器。我列表中的下一个是能够针对所有这些 LinkedServer 运行此过程 pr_MyProcedure。我有超过 25 台服务器要维护,我想做的是对它们运行程序并将结果插入我的本地 MaintenanceDB。

有人可以指出我这样做的好方法吗?我也想听听这种方法的缺点。

谢谢和干杯!

编辑:

我还考虑将 SP 存储在我其他服务器的所有主数据库上,并在我的维护服务器上远程运行它们。然后我将OPENQUERY()用来收集我需要的所有结果。但是,我认为我不想触及我的服务器列表中的所有主数据库。请告诉我这是否会比我上面所说的更好。

4

2 回答 2

1

这样做的好方法是在目标服务器上运行 SP,因为它非常模块化。如果要查询远程服务器,会比较痛苦。我不确定未记录的 sp_foreachdb 是否处理链接数据库,如果不是,您将使用动态 sql。

就像构建一个字符串并使用 Exec(@somesql) 调用它一样,这将需要自己处理结果,因为任何变量都只会在 exec 的范围内。

就我个人而言,我会考虑将这一切颠倒过来。让每个服务器调用它自己的 SP 并调用维护箱上的 SP 来存储结果。

于 2013-09-16T21:29:50.903 回答
-2

EXEC [RemoteServer] .DatabaseName.DatabaseOwner.StoredProcedureName

“参数”示例:

EXEC [RemoteServer] .DatabaseName.DatabaseOwner.StoredProcedureName 'PramValue'</p>

于 2014-07-29T11:50:36.387 回答