Festlegen von Variablen im SQLCMD-Modus


13

Verwenden von SQL Server 2008 R2 Enterprise Edition

Betrachten Sie die folgende Aussage:

:setvar source_server_name "SERVERNAME\INSTANCENAME"

Ist es im SQLCMD-Modus möglich, diesen Wert mit TSQL abzurufen?

Etwas wie: :setvar source_server_name = SELECT @@servername

Vielen Dank

Update 15.07.2013

Die beiden unten aufgeführten Antworten haben nicht das gewünschte Ergebnis geliefert, daher füge ich eine relevantere Exampe hinzu.

:setvar source_server_name [myserver]

Die Variable source_server_name wird auf die Textzeichenfolge [myserver_1] gesetzt.

Das möchte ich können:

create table #tmp(
id int identity(1,1),
server sysname
)

insert into #tmp values('myserver_1'),('myserver_2');

:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1

select '$(source_server_name)' 

(No column name)
myserver_1

Die Variable source_server_name würde auf den Wert in server für die ID 1 gesetzt.


Nicht, dass ich es gewusst hätte oder es herausfinden könnte.

1
Was Sie verlangen, ist per se nicht möglich, da sqlcmd-Variablen vom Client ausgewertet werden, bevor die SQL jemals an den Server gesendet wird. Sie fordern den SQL-Server auf, den Wert einer Variablen festzulegen, die er nie sieht. Führen Sie einen SQL-Profiler-Trace für ein SQL-Skript mit SQL-Cmd-Variablen aus, und Sie werden sehen, dass alle bereits ausgewertet wurden.
Tim Abell

Antworten:


9

Ich denke, Sie müssen Ihre Ergebnisse in eine Datei ausgeben und sie wieder einlesen. So etwas sollte Ihnen helfen, sich dem zu nähern, wonach Sie suchen:

:setvar MyDir "C:\scripts"
:OUT $(MyDir)\test.txt
PRINT ':SETVAR ServerName ''' + @@SERVERNAME + ''''
GO
:OUT stdout
:r $(MyDir)\test.txt
GO
SELECT $(ServerName)

Sie können weitere Beispiele hier sehen .


Vielen Dank. Ich bin bereits von der Arbeit abgereist, also werde ich deinen Vorschlag am Montag
ausprobieren

Ich habe meine Frage aktualisiert
Craig Efrein

Diese Antwort hat sich als die nützlichste erwiesen.
Craig Efrein

1
Ich denke, der wichtige Teil hier ist, dass Sie separate Stapel haben müssen, um 1) die SETVAR-Datei zu generieren, 2) sie auszuführen, um die Skriptvariable zu initialisieren, und schließlich 3) die Skriptvariable zu verwenden.
Andriy M
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.