2016-06-06 10 views
3

Ich versuche, einige Zeichenfolgen zusammen zu verbinden, um einen Pfad zu definieren - zum Beispiel gegeben $ (name) = "PATH", möchte ich :r .\PathOne\PATH.sql. Die Abfrage schlägt bei der ersten :r aufgrund Syntax Error fehl. Wenn ich die Pfade fest codiere und $(name) in den Bedingungen lasse, funktioniert es wie erwartet. Es ist nur die String-Konstruktion für den Pfad, der aus irgendeinem Grund versagt.SQL Joining Strings für einen Pfad Verweis auf externe Datei

IF '$(name)' LIKE 'TEST%' 
BEGIN 
    :r .\PathOne\'$(name)'.sql 
END 
IF '$(name)' NOT LIKE 'TEST%' 
BEGIN 
    :r .\PathTwo\'$(name)'.sql 
END 

Wie gehe ich Strings für einen Pfad in SQL verbinden? Die Benennung der Dateien funktioniert direkt.

+1

Sind helfen Sie sicher, dass Sie Ihre Abfragefenster auf SQLCMD-Modus eingestellt? Wo haben Sie die Namensvariable definiert? –

+0

Bitte geben Sie das gewünschte Ergebnis und das Ergebnis erhalten Sie – FLICKER

+0

@AaronBertrand Ja ist es - das ist definiert und funktioniert anderswo, nur nicht in der String-Konstruktion. – RobVious

Antwort

4

beilegen fest einprogrammierte Teile des Pfades innerhalb eines doppelten Anführungszeichen und Ihre Variablen ohne Raum neben fest codierten Teil einen Weg für die Konstruktion, zum Beispiel

:setvar filename "test" 
:setvar root "D:\temp" 
:r $(root)"\test\"$(filename)".sql" 

in Weg führen wird wie

D: \ temp \ test \ test.sql

bis R eSolve Ihr Problem versuchen, so etwas wie dies

:r ".\PathOne\"$(name)".sql" 

Hope this

1

Ich weiß, dass es nicht intuitiv klingt, aber versuchen Sie, den Pfad in Anführungszeichen setzen, wie unten. Das funktioniert auf meiner Maschine. Ohne die doppelten Anführungszeichen bekomme ich denselben Fehler wie du.

:setvar name "test" 

if '$(name)' like 'test%' 
begin 
    :r "c:\temp\test1\"$(name).sql 
end 
else if '$(name)' not like 'test%' 
begin 
    :r "c:\temp\test2\"$(name).sql 
end