我正在尝试创建一个SQL作业,该作业位于我喜欢称为维护服务器的位置,其中包含有关所有其他服务器数据库的详细信息。所以我有一个存储过程来收集我拥有的所有必需数据,此存储过程现在位于MaintenanceServer.MaintenanceDB.pr_MyProcedure中。
现在我想做的是。我在维护服务器上创建链接服务器,指向我想要维护的所有其他服务器。我的列表中的下一步是能够针对所有这些LinkedServers运行此过程pr_MyProcedure。我有超过25台服务器要维护,我想要做的是对它们运行程序并将结果插入我的本地MaintenanceDB。
有人能指出我这么做的好方法吗?我也想听听这种方法的缺点。
谢谢,干杯!
修改
我还考虑将SP存储在其他服务器的所有主数据库上,并在维护服务器上远程运行它们。然后我将使用OPENQUERY()
收集我需要的所有结果。但是,我不认为我想触摸服务器列表上的所有主数据库。请告诉我这是否比我上面说过的更好。
答案 0 :(得分:1)
这样做的好方法是在目标服务器上运行SP,因为它非常模块化。如果你想查询远程服务器,那将会更加痛苦。我不确定未记录的sp_foreachdb是否处理链接数据库,如果不是,你是动态sql。
在构建字符串并使用Exec(@somesql)调用它时,需要处理结果本身,因为任何变量都只在exec内的范围内。
就我个人而言,我会考虑颠倒这一切。让每个服务器调用它自己的SP,并在维护盒上调用SP来存储结果。
答案 1 :(得分:-2)
EXEC [RemoteServer] .DatabaseName.DatabaseOwner.StoredProcedureName
“PARAMS” 例如:
EXEC [RemoteServer] .DatabaseName.DatabaseOwner.StoredProcedureName'PramValue'