2016-11-09 1 views
0

Ich habe eine große Skriptdatei und ich muss es auf einem anderen Server verwenden. Ich muss den Namen des Servers einmal am Anfang mit Declare bearbeiten, damit ich das gleiche Skript auf mehreren Servern nur verwenden kann, indem ich den Wert der Variablen ändere.Deklarieren Sie den Servernamen als eine Variable in MS Sql Server 2016

etwas wie folgt aus:

Declare @Quell nvarchar(100) 
SET @Quell = '[server1].[dbo]' 

SELECT * From @Quell.[Documents] 

aber es hat nicht funktioniert.

wie geht das? Danke

+2

Sie können dies nur tun, mit dynamischem SQL – HoneyBadger

+0

Sie nicht identifires in SQL parametrieren. Sie können entweder dynamic sql verwenden oder die Datei mit einem Texteditor bearbeiten, der eine Funktion zum Suchen und Ersetzen enthält, sodass Sie jedes Auftreten des Servernamens mit einem einzigen Klick ändern können. –

+1

Hier ist ein Link zu den [dynamischen Microsoft SQL-Dokumenten] (https://msdn.microsoft.com/en-us/library/ms709342%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396). Ein alternativer Ansatz besteht darin, [SSIS] (https://msdn.microsoft.com/en-us/library/ms141026.aspx) zu verwenden, um die Server zu durchlaufen und das Skript jeweils auszuführen. –

Antwort

2

Leider ist die Makrosubstitution in SQL Server nicht zulässig, aber Sie können dynamisches SQL verwenden.

Declare @Quell nvarchar(100) 
SET @Quell = '[server1].[dbo]' 

Declare @SQL varchar(max) 
SET @SQL = 'SELECT * From ' + @Quell +'.[Documents]' 
Exec(@SQL) 
1

Wenn Sie das Skript von SQL Server Management Studio ausgeführt wird, können Sie ein SQLCMD-Variable verwenden und das Skript im SQLCMD-Modus ausgeführt (Query -> SQLCMD-Modus). Ein SQLCMD-Skript kann auch mit dem Befehlszeilendienstprogramm SQLCMD ausgeführt werden, wobei die Variablenwerte als Befehlszeilenargumente übergeben werden.

Beispielskript:

:SETVAR Quell "[server1].[dbo]" 

SELECT * From $(Quell).[Documents];