Sql 在不同服务器上的其他存储过程中调用一个存储过程
如何在另一个存储过程中执行一个存储过程Sql 在不同服务器上的其他存储过程中调用一个存储过程,sql,sql-server,Sql,Sql Server,如何在另一个存储过程中执行一个存储过程 注意:两个存储过程驻留在不同的服务器上如果可以,最简单的方法是在系统上(它们必须是-单击链接以获取有关链接服务器的信息): 查看更多信息 另外,为了避免硬编码服务器名称,请查看Paul的同义词。进一步到@Kyles answer,您可以添加一个,以消除对较长/链接结构的需要。这将抽象被引用的服务器。因此,您可以将SP从UAT移动到实时环境,代码就不必更改。这两个环境中的同义词将在每台服务器上设置,以正确引用该环境中的另一台服务器。我假设S.p是“存储过程”
注意:两个存储过程驻留在不同的服务器上如果可以,最简单的方法是在系统上(它们必须是-单击链接以获取有关链接服务器的信息): 查看更多信息
另外,为了避免硬编码服务器名称,请查看Paul的同义词。进一步到@Kyles answer,您可以添加一个,以消除对较长/链接结构的需要。这将抽象被引用的服务器。因此,您可以将SP从UAT移动到实时环境,代码就不必更改。这两个环境中的同义词将在每台服务器上设置,以正确引用该环境中的另一台服务器。我假设S.p是“存储过程”?只有当远程服务器名称包含无效的标识符字符时,才需要该名称周围的方括号,就像SQL中的任何其他名称一样。我在工作中经常看到这一点,因为我们有很多服务器的名称中都有连字符,这需要括号,因此人们最终会将它们用于所有服务器名称,这是不必要的丑陋,我认为。请参阅我的答案,了解从存储过程中提取服务器名称的方法。这样,您就可以在环境之间移动代码,而不必修改引用本身。此外,如果所讨论的存储过程属于数据库所有者,则倒数第二部分仅是数据库所有者(dbo)。在大多数设计中是这样的,但更正确的规范应该是ObjectOwnerName。@Paul-完全正确,我应该提到同义词,因为我们以前在这里被咬过@P爸爸-根据您的第二条评论修改。这只是一个简单的命名结构。同义词应该是一个最佳实践,硬编码一个由4部分组成的名称只是自找麻烦+1@Daytona250:没错,但知道功能可用始终是问题所在。只有一位新的DBA进入了我以前的角色,才向团队强调了这一点。在此之前,我们认为硬编码链接是唯一的选择。
EXEC [RemoteServer].DatabaseName.ObjectOwnerName.StoredProcedureName