2016-07-14 6 views
0

Ich habe zwei Datenbankserver, server1 und server2, die unsere Diff-Umgebung unseres Legacy-Systems sind. Ich muss eine gespeicherte Prozedur schreiben, um Daten zu erhalten, die mit einem der env kommunizieren.Wie verwendet man die Variable für Servername in SQL Server gespeicherte Prozedur

Ich möchte eine Art und Weise, so dass ich einfach das env

Wie wechseln:

Declare @Server nvarchar(20) 
set @Server="server1" 

select * 
from @Server.global.dbo.tblaccount 

Antwort

2

Parameter können nicht für Bezeichner verwendet werden - Spaltennamen, Tabellennamen, Schemanamen, Servernamen, Funktion Namen und so weiter.

Sie können dies mit dynamischem SQL:

declare @Server nvarchar(20); 
declare @sql nvarchar(max); 

set @Server = 'server1'; 

set @sql = 'select * from [Server].global.dbo.tblaccount'; 

set @sql = replace(@sql, '[Server]', @Server); 

exec sp_executesql @sql; 
0

Verwendung synonyms:

create synonym mylocalschema.RemoteTable for server1.database.schema.table;

referenziert werden als:

select top 10 * from mylocalschema.RemoteTable;

auf env je die Synonyme wil Ich bin ein Verweis auf den richtigen Server und der Code (SP, Ansichten, Trigger, was auch immer) wird das gleiche für beide sein.

das einzige doppelte Element ist das Skript zum Erstellen von Synonymen: eins für server1 und eine weitere Kopie für server2 (oder vielleicht das gleiche Skript mit dynamischem sql ...).