Einstellung sqlcmd Variable mit tsql Variable

Es scheint, wie dieser Ansatz für die Einstellung sqlcmd Variable funktioniert nicht so ich frage mich, ob es einen anderen path?

 DECLARE @d varchar(max); SET @d = 'foobar'; :setvar database @d USE $(database) 

Anmerkung: Ich erkannte, dass die Verwendung von :setvar auf diese Weise funktioniert, aber ich möchte es mit einer variables im T-SQL-Skript setzen, anstatt es explizit einzustellen.

 :setvar database "foobar" 

Das macht aus der Perspektive von SQLCMD keinen logischen Sinn. :setvar ist ein Befehl, der außerhalb des T-SQL-Skripts lebt; Es kann nicht alles sehen, was das T-SQL-Skript zur Laufzeit macht. Sie können die Variable durch eine beliebige Anzahl von Mitteln , einschließlich Umgebungsvariablen, Optionen und :setvar selbst, aber Sie können nicht in Laufzeit T-SQL-Ausführung mischen.

Rethink dein Skript so das SQLCMD-Skript lebt "außerhalb" das T-SQL-Skript, und das T-SQL-Skript führt die notwendigen Runtime-Aktionen. Da Sie dynamische statementen in T-SQL ausführen können, sollte es keine Notwendigkeit geben, eine SQLCMD-Variable über T-SQL zu setzen, anstatt umgekehrt.