2016-09-15 32 views
0

Ich arbeite mit einigen SQL-Skripten, die ich wiederverwendbar sein möchte, så muss ich einige Variablen verwenden.SQLCMD Variable im Pfad

ich einen Fledermaus-Skript, das den SQL-Skript mit sqlcmd

sqlcmd -S <SERVER> -v PROJECT="<PROJECTNAME>" -i .\start.sql 

Im start.sql Skript ausführen, ich einen anderen SQL-Skript wie folgen auszuführen:

:r .\<PROJECTNAME>\init.sql 

So habe ich fest einprogrammiert die Wert der Variablen und das funktioniert perfekt. Ich möchte die Variable selbst verwenden, aber ich kann das nicht zur Arbeit bringen.

:r .\$(PROJECT)\init.sql 

Die letzte Zeile hier ist, was ich dachte, würde funktionieren. Ich habe den Wert in der Variable PROJECT ausgedruckt, indem ich das getan habe:

Das gibt mir den Wert der Variablen.

Hoffe jemand kann mir helfen, mit der Variablen das Skript im Ordner ausführen.

Vielen Dank im Voraus.

EDIT: PRINT $ (PROJECT) gab folgende Fehlermeldung: Der Name "XXX" ist in diesem Zusammenhang nicht zulässig. Gültige Ausdrücke sind Konstanten, konstante Ausdrücke und (in einigen Kontexten) Variablen. Spaltennamen sind nicht erlaubt.

XXX = Wert der Variablen.

+0

Was bekommen Sie, wenn Sie 'PRINT $ (PROJECT)' (keine einfachen Anführungszeichen) verwenden? – artm

+0

Woher weißt du, dass es nicht funktioniert hat? Haben Sie eine Fehlermeldung erhalten? Oder hat etwas, was passieren sollte, nicht passieren? Wenn ja, was? – BeanFrog

+0

Nein, das ist die Sache, wenn ich: r. \ $ (PROJECT) \ init.sql es einfach überspringen, ohne irgendwelche Nachrichten. Wenn Sie jedoch $ (PROJECT) in den Variablenwert umschalten, wird das andere Skript ausgeführt. –

Antwort

1

Ich habe ein kleines Experiment gemacht, da ich weiß, dass ich es geschafft habe, eine ähnliche Syntax zu bekommen, die für mich früher funktioniert. Ich fand, dass, wenn ich repliziert, was Sie getan hatte, ich folgende Fehlermeldung bekam:

A fatal scripting error occurred. Cannot find directory in the path specified for ":r" command.

Wenn stattdessen ich das Ganze des Weges in die Variable setzen - es funktioniert. Also versuchen Sie Ihre SQL-Datei zu diesem Wechsel:

:r $(PROJECT_FILE_NAME) 

und es von SQLCMD wie dieser Aufruf:

sqlcmd -S <SERVER> -v PROJECT_FILE_NAME=".\<PROJECTNAME>\init.sql" -i .\start.sql 

Als ich diesen Ansatz nahm, lief er die Datei init.sql ohne Fehler.

+1

Ich habe es gerade auch versucht und es funktioniert gut, wenn ich einen vollständigen Pfad in der Variable übergebe, aber das möchte ich in diesem Fall nicht machen. Ich habe eine andere Lösung gefunden, wie ich Variablen in sqlcmd darstellen könnte. **: r ". \" $ (PROJECT) "\ register.sql" ** Dies war die markierte Antwort in diesem Forum Post https://social.msdn.microsoft.com/Foren/sqlserver/de-DE/ce6b6277-340a-4900-814d-5714f74b411f/sqlcmd-Variable-Verkettung-Verhalten-warum-ist-es-so? Forum = sqltools –

Verwandte Themen