Answers:
您可以使用OPENQUERY
MSDN中所述的方法来获取链接服务器的信息:
即使用 OPENQUERY ( linked_server ,'query' )
如下所示,将使用sys.dm_exec_connections
dmv 为您提供服务器名称
SELECT * FROM OPENQUERY (
linkedservername,
'SELECT
@@SERVERNAME AS TargetServerName,
SUSER_SNAME() AS ConnectedWith,
DB_NAME() AS DefaultDB,
client_net_address AS IPAddress
FROM
sys.dm_exec_connections
WHERE
session_id = @@SPID
')
一些更短一些(更自然的恕我直言)的方法:
EXEC LinkedServer.[master].sys.sp_executesql N'SELECT @@VERSION;';
要么:
EXEC('SELECT @@VERSION;') AT LinkedServer;
我更喜欢这sp_executesql
条路线,因为:
它仍将允许使用强类型参数,而不是处理所有类型的字符串连接,转义单引号等。
在该路径中指定一个特定的数据库很容易,而不必在查询中引用的所有对象上放置数据库前缀。是的,您可以动态定义数据库:
DECLARE @db SYSNAME, @exec NVARCHAR(1024);
SET @db = N'tempdb';
SET @exec = N'LinkedServer.' + QUOTENAME(@db) + N'.sys.sp_executesql';
EXEC @exec N'SELECT @@VERSION, DB_NAME();';
以及链接服务器的名称(如果需要)是:
DECLARE @srv SYSNAME, @db SYSNAME, @exec NVARCHAR(1024);
SET @srv = N'LinkedServer';
SET @db = N'tempdb';
SET @exec = QUOTENAME(@srv) + N'.' + QUOTENAME(@db) + N'.sys.sp_executesql';
EXEC @exec N'SELECT @@VERSION, DB_NAME();';
SELECT name FROM master.sys.servers where is_linked=1
然后,我循环浏览并动态获取所需的一切。