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.