2017-05-18 72 views
0

我需要編寫一個存儲過程,它將返回從鏈接服務器獲取的參數的值。從鏈接服務器返回變量

我曾嘗試聲明動態SQL內部和外部的變量,但它失敗,必須聲明變量錯誤。

declare @srvr nvarchar(100) 
declare @dbn nvarchar(50) 

set @srvr = 'ServerName' 
set @dbn = 'DatabaseName' 

Declare @sql nvarchar(max) 

set @sql = 'declare @param nvarchar(50) set @param = (Select X from [' + @srvr + '].[' + @dbn + '].[TableName])' 

exec (@sql) 
print @param 

這將成爲駐留在一箇中央數據庫的多個框架程序,這些程序會恢復其他數據庫時到環境中形成的各種

任何想法的「準備腳本」的一部分,請叫?

非常感謝

+0

鏈接的服務器是一個紅色的鯡魚。這是關於動態SQL的一個問題。 –

回答

0

您需要聲明變量兩次。一次用於內部環境,一次用於外部環境。他們不需要使用相同的內部名稱和外部名稱:

declare @srvr nvarchar(100) 
declare @dbn nvarchar(50) 

set @srvr = N'ServerName' 
set @dbn = N'DatabaseName' 

Declare @sql nvarchar(max) 
declare @parms nvarchar(max) 
set @sql = N'set @param = (Select X from [' + @srvr + '].[' + @dbn + '].[TableName])' 
set @parms = N'@param nvarchar(50) output' 
declare @param2 nvarchar(50) 

exec sp_executesql @sql,@parms,@param = @param2 output 
print @param2 
+0

完美的謝謝 –