是否可以隐式而不是显式地引用链接服务器?

Mat*_*ieu 1 sql-server linked-server

我正在使用引用链接服务器的视图和存储过程:

SELECT Id, Name
FROM [LinkedServer].Database.dbo.FooView
Run Code Online (Sandbox Code Playgroud)

我想隐藏[LinkedServer].Database或至少隐藏[LinkedServer]我的视图和存储过程的一部分。这样我就可以拥有“与服务器无关”的代码,可以很容易地在生产服务器和开发服务器之间进行比较。

这可以在服务器级别(如链接服务器)或数据库级别(使用它的视图和存储过程)完成。

Eri*_*ikE 8

CREATE SYNONYM dbo.FooView FOR [LinkedServer].Database.dbo.FooView
Run Code Online (Sandbox Code Playgroud)

然后只需dbo.FooView在您的 SP 中使用,它们在生产和开发之间可以相同。

请注意,这仅适用于 SQL 2005 及更高版本。

SQL 2000 的一个解决方案可能是使用仅SELECT * FROM [LinkedServer].Database.dbo.FooView在其中没有其他代码的视图。您可以拥有一个包含这些视图名称和相应命名源列表的元表。然后,编写一个遍历表的 SP,并根据需要(重新)创建视图。然后,如果您想更改视图指向的位置,请使用新的链接服务器名称作为参数运行 SP(或将其保存在元表中并更新它),并且所有依赖对象将静默指向新位置现在。只要列名、位置和数据类型相同,它就可以正常工作。