Sql-Server
從以 EXEC 開頭的語句中設置變數
我正在嘗試從 LinkedServer 獲取伺服器名稱並將其分配給一個變數。
從這個問題(從連結伺服器獲取@@SERVERNAME),我發現其中任何一個都返回伺服器名稱。
EXEC LinkedServer.[master].sys.sp_executesql N'SELECT @@VERSION;';
或者
EXEC('SELECT @@VERSION;') AT LinkedServer;
然而,當我嘗試將該值分配給參數時,SQL Server 指出它不正確:
SET @DbServerName = (EXEC TMR_DM_LS.[master].sys.sp_executesql N'SELECT @@SERVERNAME')
消息 156,級別 15,狀態 1,行 XXXX 關鍵字“EXEC”附近的語法不正確。
消息 102,級別 15,狀態 1,行 XXXX ‘)’ 附近的語法不正確
我究竟做錯了什麼?
嘗試以下操作:
DECLARE @DbServerName sysname; EXEC [TMR_DM_LS].[master].sys.sp_executesql N'SELECT @DbServerName_tmp = @@SERVERNAME;', N'@DbServerName_tmp sysname OUTPUT', @DbServerName_tmp = @DbServerName OUTPUT; SELECT @DbServerName AS [RemoteName];
**但是,**以上是一般如何返回資訊。如果您真的只想要伺服器名稱,那麼我認為您已經在本地伺服器上擁有它。連結伺服器定義,取決於它的配置方式,很可能具有您正在尋找的名稱:
DECLARE @DbServerName sysname; SELECT @DbServerName = [data_source] FROM sys.servers WHERE [name] = N'TMR_DM_LS'; SELECT @DbServerName AS [RemoteName];
在進行實際的遠端執行之前看看這是否有效,因為在本地獲取值會更有效。
UPDATE
OP 回复說所需的值確實在
sys.servers
系統目錄視圖中。