如何通过sql server中的链接服务器从链接服务器查询?

kap*_*tan 4 sql-server linked-server

我有以下设置:

SQL-Server 1  --linked-->  SQL-Server 2  --linked->  SQL-Server 3
Run Code Online (Sandbox Code Playgroud)

问题是我可以通过 SQL Server 2 从 SQL Server 1 查询 SQL Server 3 吗?

不幸的是,我有几个限制:

  • 不能使用 openquery
  • 不能在服务器 2 上使用视图(会有很多视图,并且必须维护)
  • 无法创建从服务器 1 到服务器 3 的链接(由于防火墙问题)
  • 服务器是 MS SQL 服务器

Han*_*non 5

不幸的是,根据您对问题设置的条件,没有办法完成您想要的。

SQL Server 需要支持5部分命名,例如:

SELECT *
FROM server1.server2.database.schema.table;
Run Code Online (Sandbox Code Playgroud)

这显然行不通。

如果你不怕一点动态 SQL,你可以使用这样的东西:

DECLARE @cmd nvarchar(max) = N'
DECLARE @cmd nvarchar(max) = N''
SELECT @@SERVERNAME; --this would be where your query goes.
'';
EXEC (@cmd) AT linked_server_2;
';
EXEC (@cmd) AT linked_server_1;
Run Code Online (Sandbox Code Playgroud)

本质上,上面的代码在 上执行了一个动态 SQL 字符串linked_server_1,但动态 SQL 实际上是一个嵌入的动态 SQL 字符串,它在 上执行查询linked_server_2