我在两个不同的生产服务器中有一个数据库。我想保持两者之间的模式一致。一个具有调用引用链接服务器的存储过程的作业。另一个不(也不应该)包含那些作业或与第一台服务器中同名的链接服务器,但我希望两台服务器都具有相同的存储过程。但是,SQL Server 拒绝在没有设置链接服务器的服务器上创建引用链接服务器的过程。我理解为什么会发生这种情况,但我需要一个不涉及更改过程代码的解决方法(例如使用动态 SQL 来隐藏编译器的引用)。
我尝试创建一个指向本地服务器的预期名称的链接服务器,但 SQL Server 足够聪明,可以看到该链接服务器上不存在引用的表。如果我为不存在的服务器创建一个,则 SQL 在创建过程期间会超时,说它无法连接到远程服务器。
有没有办法创建一个虚拟链接服务器,这样 SQL Server 就不会尝试验证链接服务器上的表名?
在本地服务器上创建虚拟的空表,以便可以创建过程。
更改过程代码以使用两部分同义词。在需要使用链接服务器的服务器上:
在不需要远程引用存在的本地服务器上:
由于延迟名称解析(在创建引用链接服务器的过程时不起作用),可以创建使用后者的存储过程。这将需要更改存储过程代码,但这将是一次性更改。
您可以创建一个无处可去的链接服务器
然后任何查询都会注意到链接服务器在那里,但无法访问其中的任何内容。你会经常发现链接服务器的查询(据我所知)只是检查链接服务器(因为你声明它不像 SQL 数据库,它似乎没有检查那么多细节它假定您知道自己在做什么(如果您在 GUI 中执行此操作,您会收到警告,但仍然可以创建链接服务器,而无需注册它可以连接。
由于您实际上正在创建链接服务器,因此不确定这是否是您所追求的可接受的解决方法,但它本质上是一个虚拟的,因为它无处可去,如果您尝试访问它,您会收到登录错误