【问题标题】:SQL Server 2008 R2 - Running a Stored Procedure against Linked ServersSQL Server 2008 R2 - 对链接服务器运行存储过程
【发布时间】:2013-09-16 15:45:56
【问题描述】:

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

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

有人能指出一个好方法吗?我也想听听这种方法的缺点。

感谢和干杯!

编辑:

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

【问题讨论】:

  • 一个很好的方法来做这件事。你也试过什么?
  • 嗨!感谢您的回复!完成此任务的一个好方法是我的意思是不会过多影响其他服务器的性能。我目前正在查看上面编辑部分中的那个,但就像我说的那样,我想我不想惹上主人。所以我问在理论上是否可以做我上面的问题。如果是,我想知道如何对那些链接的服务器运行查询。谢谢! :)

标签: sql-server stored-procedures sql-server-2008-r2 linked-server


【解决方案1】:

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

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

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

【讨论】:

  • 是的,这就是我现在正在做的事情。我已将 SP 存储在我的所有服务器上以进行维护,并创建了另一个 SP 以将结果整合到维护服务器上。非常感谢!将您标记为答案...
  • Smiley 给了你答案但没有点赞?好吧,我会处理的!
【解决方案2】:

EXEC [RemoteServer] .DatabaseName.DatabaseOwner.StoredProcedureName

“参数” 示例:

EXEC [RemoteServer] .DatabaseName.DatabaseOwner.StoredProcedureName 'PramValue'

【讨论】:

  • -1。这只是在远程服务器上调用存储过程的语法,并不能真正回答问题
  • 它确实回答了标题中的问题,因此可能对那些关注链接但不需要更复杂问题的答案的人更有帮助,诚然它没有回答。
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多