Sql-Server

從以 EXEC 開頭的語句中設置變數

  • January 22, 2019

我正在嘗試從 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系統目錄視圖中。

引用自:https://dba.stackexchange.com/questions/227523