从链接服务器获取@@ SERVERNAME


8

这似乎是一个基本问题,但我在那里找不到任何答案-我需要能够从链接服务器获取服务器名称/实例等。我尝试了几件事:

select <linked server>.@@SERVERNAME;
select <linked server>.SERVERPROPERTY('ServerName');

...但是没有喜悦。有任何想法吗?

这是SQL 2008 R220142008R2是链接服务器)

编辑:错误是:

消息102,级别15,状态1,第2行'@@ SERVERNAME'附近的语法不正确。

Answers:


8

您可以使用OPENQUERY MSDN中所述的方法来获取链接服务器的信息:

即使用 OPENQUERY ( linked_server ,'query' )

如下所示,将使用sys.dm_exec_connectionsdmv 为您提供服务器名称

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
        ')

11

一些更短一些(更自然的恕我直言)的方法:

EXEC LinkedServer.[master].sys.sp_executesql N'SELECT @@VERSION;';

要么:

EXEC('SELECT @@VERSION;') AT LinkedServer;

我更喜欢这sp_executesql条路线,因为:

  1. 它仍将允许使用强类型参数,而不是处理所有类型的字符串连接,转义单引号等。

  2. 在该路径中指定一个特定的数据库很容易,而不必在查询中引用的所有对象上放置数据库前缀。是的,您可以动态定义数据库:

    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();';
    

1

有更简单的方法来获取链接服务器的服务器名称。您可以查询sys.sysservers或运行EXEC sp_linkedservers来为您提供本地链接服务器上所需的所有信息,包括服务器名称。如果需要,这是sp_linkedservers 上的链接。尽管这不一定能回答如何远程选择@@ SERVERNAME的问题,但它可以为您提供这些信息。


这正是我所做的。SELECT name FROM master.sys.servers where is_linked=1然后,我循环浏览并动态获取所需的一切。
dwjv 2015年

2
好吧,请不要忘记链接服务器可以通过IP地址,客户端网络实用程序别名或被主机文件/ DNS掩盖的名称等定义。SQLServer路由到它的方式不一定是主机名。
亚伦·伯特兰

-2

最简单的方法(SSMS)

如果您没有master数据库的权限(也不应),则无法通过openquery编写脚本。

从对象资源管理器

+链接对象

++链接服务器

+++ [链接服务器名称]

左键单击链接服务器名称脚本链接服务器为>创建到>新建查询编辑器窗口

在此处查找@ datasrc =“链接的服务器源”

瞧!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.