我有一個SSMS實例打開,我連接到一個遠程服務器以及本地主機。我如何獲取SSMS當前連接的所有服務器的名稱?遠程服務器的會徽圖案形似 獲取多個服務器名稱SSMS連接到
和當地的模樣
另外,我想知道是否有任何問題與連接到多臺服務器從SSMS的一個實例,以及如何通過腳本在服務器之間切換,而無需點擊表名並執行類似的操作select top 1000 rows
我有一個SSMS實例打開,我連接到一個遠程服務器以及本地主機。我如何獲取SSMS當前連接的所有服務器的名稱?遠程服務器的會徽圖案形似 獲取多個服務器名稱SSMS連接到
和當地的模樣
另外,我想知道是否有任何問題與連接到多臺服務器從SSMS的一個實例,以及如何通過腳本在服務器之間切換,而無需點擊表名並執行類似的操作select top 1000 rows
好的這裏有很多問題,因爲這並不總是一個簡單的答案。根據您的環境和權限,您可能擁有一個或多個允許訪問一個或多個具有一個或多個服務器的環境的權限組,因此可以訪問一個或多個數據庫。但是,如果您擁有權限並且已將鏈接的服務器設置爲數據訪問,則可以執行此類操作以獲取您有權訪問的內容的列表。你可以在不同的環境中類似地運行它,使它成爲一個你可以用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
我不完全確定你在問什麼。如果您問是否可以在單個查詢窗口中連接到多個SQL Server實例,則答案爲肯定。我詳細討論了這裏的含義以及其中的一些含義:Multiple instances, single query window
如果另一方面您詢問如何告訴您連接的實例,可以使用@@SERVERNAME
。
SELECT @@SERVERNAME
它會返回您連接到的實例的名稱。
通常你需要連接到一個實例每次查詢窗口和窗口之間翻轉影響特定實例你感興趣的內容。
如果你想要寫一個命令派你去,你可以設置一個特定實例將查詢窗口設置爲SQLCMD
模式(查詢菜單 - > SQLCMD模式)並使用:CONNECT
命令。
:CONNECT InstaneName
SELECT @@SERVERNAME
說例如我有兩個連接,一個本地和一個遠程。可用數據庫的下拉列表(靠近SSMS中的「新建查詢」按鈕)將只顯示可用於特定實例的數據庫。如果我轉到另一個實例並展開數據庫文件夾,然後右鍵單擊並選擇「top top 1000 rows」,則連接會自動更改。這是怎麼通過腳本? – wootscootinboogie 2013-04-23 18:43:55
你正在看兩件不同的事情。左邊的部分是對象瀏覽器,右邊是查詢窗口。您在對象資源管理器中有連接,並在查詢窗口中有連接。當您右鍵單擊並選擇「選擇最多1000行」時,您將在右側創建新的連接。連接沒有改變。你正在打開一個新的。 – 2013-04-23 19:40:22
這是一個廣泛的,深思熟慮的答案。 +1 – wootscootinboogie 2013-04-23 19:26:04
很高興它可以幫助你。 – djangojazz 2013-04-23 19:34:13