0

我打开了一个 SSMS 实例,我连接到一台远程服务器以及 localhost。如何获取 SSMS 当前连接的所有服务器的名称?远程服务器的标志看起来像 在此处输入图像描述

当地看起来像 在此处输入图像描述

另外,我想知道从一个 SSMS 实例连接到多个服务器是否有任何问题,以及如何通过脚本在服务器之间切换而无需单击表名并执行类似的操作select top 1000 rows

4

2 回答 2

1

好的,这里有多个问题在起作用,因为这并不总是一个简单的答案。根据您的环境和权限,您可能拥有一个或多个权限组,这些权限组可以访问一个或多个环境,这些环境具有一个或多个服务器,因此可以访问一个或多个数据库。但是,如果您确实有权限并且您已设置了具有数据访问权限的链接服务器,您可以执行类似的操作来获取您有权访问的内容的列表。您可以在不同的环境中类似地运行它,使其成为您可以使用 ADO.NET 或类似方法调用的过程。

--declare variable for dynamic SQL
DECLARE 
    @SQL    NVARCHAR(512)
,   @x      int


-- Create temp table to catch linked servers
Declare @Servers TABLE
    (
        Id          int identity
    ,   ServerName  VARCHAR(128)
    )

-- insert linked servers
insert into @Servers
select name
FROM sys.servers

-- remove temp table if it exists as it should not be prepopulated.
IF object_ID('tempdb..#Databases') IS NOT NULL
    DROP TABLE tempdb..#Databases
;

-- Create temp table to catch built in sql stored procedure
CREATE TABLE #Databases --DECLARE @Procs table 
    (
        ServerName      varchar(64)
    ,   DatabaseName    VARCHAR(128)
    )

SET @X = 1

-- Loops through the linked servers with matching criteria to examine how MANY there are.  Do a while loop while they exist.
WHILE @X <= (SELECT count(*) FROM @Servers)
BEGIN
    declare @DB varchar(128);

    Select @DB = ServerName from @Servers where Id = @X  -- get DB name from current cursor increment

    -- Set up dynamic SQL but do not include master and other meta databases as no one cares about them.
    SET @SQL = 'insert into #Databases select ''' + @Db + ''', name from ' + @DB + '.master.sys.databases
                where name not in (''master'',''tempdb'',''model'',''msdb'')'

    -- Execute the dynamic sql to insert into collection object
    exec sp_executesql @SQL

    -- increment for next iteration on next server
    SET @X = @X + 1
END
;

SELECT *
FROM #Databases
于 2013-04-23T19:12:34.043 回答
1

我不完全确定你在问什么。如果您询问是否可以在单个查询窗口中连接到多个 SQL Server 实例,答案是肯定的。我在这里详细介绍了如何以及其中的一些含义:多个实例,单个查询窗口

另一方面,如果您要问如何判断您连接的实例可以使用@@SERVERNAME

SELECT @@SERVERNAME

它将返回您连接到的实例的名称。

通常,您会为每个查询窗口连接一个实例并在窗口之间切换以影响您感兴趣的特定实例。

如果您想编写命令将您发送到特定实例,您可以将查询窗口设置为SQLCMD模式(查询菜单 -> SQLCMD 模式)并使用该:CONNECT命令。

:CONNECT InstaneName
SELECT @@SERVERNAME
于 2013-04-23T18:41:24.410 回答