2017-05-18 3 views
0

Ich muss eine gespeicherte Prozedur schreiben, die den Wert eines Parameters zurückgibt, der von einem Verbindungsserver abgerufen wurde.Zurückgeben von Variablen von Verbindungsservern

Ich habe versucht, die Variable sowohl innerhalb als auch außerhalb der dynamischen SQL zu deklarieren, aber es schlägt mit einem Variablenfehler zu deklarieren.

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 

Dies wird den Rahmen für mehrere Verfahren bilden, die in einer zentralen Datenbank befinden, werden diese Prozeduren aufgerufen werden, wenn andere Datenbanken in die Umgebung wieder herstellt Teil von ‚prep script‘ Bildung von Sorten

Irgendwelche Ideen bitte ?

Vielen Dank

+0

Der Verbindungsserver ist ein Red Hering. Dies ist eine Frage zu dynamischem SQL. –

Antwort

0

Sie müssen die Variable zweimal erklären. Einmal für den inneren Kontext, einmal für den äußeren Kontext. Sie müssen nicht die gleichen Namen innen und außen verwenden:

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

Perfekt danke –

Verwandte Themen