0

SSMS のインスタンスを 1 つ開いており、1 つのリモート サーバーとローカルホストに接続しています。SSMS が現在接続されているすべてのサーバーの名前を取得するにはどうすればよいですか? リモートサーバーのエンブレムは次のようになります ここに画像の説明を入力

ローカルは次のようになります ここに画像の説明を入力

また、SSMSの1つのインスタンスから複数のサーバーに接続する際に問題があるかどうか、およびテーブル名をクリックして次のようなことをせずにスクリプトを介してサーバーを切り替える方法を知りたいですselect top 1000 rows

4

2 に答える 2

1

これは常に単純な答えではないため、ここでは複数の問題が発生しています。環境と権限に応じて、1 つまたは複数のデータベースにアクセスできる 1 つまたは複数のサーバーを持つ 1 つまたは複数の環境にアクセスできる 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 に答える