Sql-Server
從連結伺服器獲取@@SERVERNAME
這似乎是一個基本問題,但我找不到任何答案 - 我需要能夠從連結伺服器獲取伺服器名稱/實例等。我嘗試了幾件事:
select <linked server>.@@SERVERNAME; select <linked server>.SERVERPROPERTY('ServerName');
……但沒有喜悅。有任何想法嗎?
這是
SQL 2008 R2
&2014
(2008R2
是連結伺服器)編輯:錯誤是:
消息 102,級別 15,狀態 1,第 2 行“@@SERVERNAME”附近的語法不正確。
您可以
OPENQUERY
按照 MSDN 中的說明使用來獲取連結伺服器的資訊:即使用
OPENQUERY ( linked_server ,'query' )
像下面這樣的東西會給你使用
sys.dm_exec_connections
dmv 的伺服器名稱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 ')
一些稍微短一些(更自然,恕我直言)的方法:
EXEC LinkedServer.[master].sys.sp_executesql N'SELECT @@VERSION;';
要麼:
EXEC('SELECT @@VERSION;') AT LinkedServer;
我更喜歡這
sp_executesql
條路線,因為:
- 它仍然允許強類型參數,而不是處理各種字元串連接、單引號轉義等。
- 在該路徑中指定特定數據庫很容易,而不必在查詢中引用的所有對像上放置數據庫前綴。是的,您可以動態定義數據庫:
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();';