【问题标题】:SELECT @@ServerName on remote server returns local @@ServerName远程服务器上的 SELECT @@ServerName 返回本地 @@ServerName
【发布时间】:2021-08-28 03:39:08
【问题描述】:

我有两台服务器 [TESLABSQL01T][TESLABSQL02T],我想远程监控它们的连接。

一位用户昨天suggested me 一个可以帮助我的查询并且该查询确实有效:

DECLARE @ServerName varchar(50), @DynamicSQL NVARCHAR(MAX)
DECLARE @myTableVariable TABLE (id INT, ServerName varchar(50))
insert into @myTableVariable values(1,'[TESLABSQL01T]'),(2,'[TESLABSQL02T]')
-- select * from @myTableVariable

Declare VarCursor cursor for
Select ServerName from @myTableVariable
Open VarCursor
FETCH NEXT FROM VarCursor INTO @ServerName
WHILE @@FETCH_STATUS = 0 
BEGIN
    SET @DynamicSQL='SELECT @@ServerName AS [ServerName]
                 ,NAME AS DatabaseName 
                 ,COUNT(STATUS) AS [NumberOfConnections]
                 ,GETDATE() AS [TimeStamp]
                 ,hostname
                 ,program_name
                 ,loginame
    FROM '+@ServerName+'.master.sys.databases sd
    LEFT JOIN '+@ServerName+'.master.sys.sysprocesses sp ON sd.database_id = sp.dbid
    WHERE database_id NOT BETWEEN 1 AND 4
    GROUP BY NAME,hostname ,program_name ,loginame'
    

    EXEC (@DynamicSQL)

    FETCH NEXT FROM VarCursor INTO @ServerName
END
CLOSE VarCursor
DEALLOCATE VarCursor

问题是qiery在我的本地服务器上以@@ServerName的形式返回[TESLABSQL01T],但也为远程@@ServerName返回[TESLABSQL01T]

这是错误的,它应该返回[TESLABSQL02T]

【问题讨论】:

  • 查询正在本地计算机上运行,​​即使它连接到远程计算机以获取其中一个或多个表。
  • 是的,有解决方法吗? master 中的任何表都包含 @@ServerName 的值?
  • 简单明了的是只使用您已经使用的变量将值替换为FROM 子句,例如SELECT ''' + @ServerName + ''' AS [ServerName],除非您尝试解决本地注册的远程服务器名称与远程服务器不匹配的问题。
  • 呃,我需要''' 而不是'。如果需要,您可以将其发布为答案。谢谢@Damien_The_Unbeliever

标签: sql sql-server tsql scripting nameservers


【解决方案1】:

@@ServerName 将始终为您提供本地服务器名称,除非您通过 OPENQUERY 执行查询。

如果您想使用与用于动态查询(链接服务器名称)相同的变量 @ServerName,那么只需更改您的动态 SQL 以使用它。

    SET @DynamicSQL = 'SELECT ' + QUOTENAME(@ServerName, '''') + ' AS [ServerName]

如果您想要 remote 服务器为自己使用的名称,那么您可以在动态部分中使用相关子查询:

    SET @DynamicSQL = 'SELECT (SELECT name FROM sys.servers srv WHERE srv.server_id = 0) AS [ServerName]

【讨论】:

    猜你喜欢
    • 2012-12-21
    • 2017-06-06
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多