2016-06-06 1 views
3

J'essaie de joindre certaines chaînes pour définir un chemin - par exemple, étant donné $ (name) = "PATH", je veux :r .\PathOne\PATH.sql. La requête échoue au premier :r en raison de Syntax Error. Si je code en dur les chemins, et laissez $(name) dans les conditions, cela fonctionne comme prévu. C'est juste la construction de la chaîne pour le chemin qui échoue pour une raison quelconque.SQL Joining Strings pour un chemin faisant référence à un fichier externe

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

Comment puis-je joindre des chaînes pour un chemin en SQL? Nommer les fichiers fonctionne directement.

+1

Etes-vous sûr que vous définissez votre fenêtre de requête en mode SQLCMD? Où avez-vous défini la variable name? –

+0

S'il vous plaît fournir le résultat souhaité et le résultat que vous obtenez – FLICKER

+0

@AaronBertrand Oui c'est - cela est défini et fonctionne ailleurs, mais pas dans la construction de la chaîne. – RobVious

Répondre

4

Entourez les parties hardcoded du chemin à l'intérieur d'une double citation et vos variables sans espace à côté de partie hardcoded pour la construction d'un chemin, par exemple

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

se traduira par chemin comme

D: \ temp \ test \ test.sql

Pour r esolve votre problème, essayez quelque chose comme ça

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

Hope this helps

1

Je sais que cela peut ne pas sembler intuitif, mais essayez de mettre le chemin entre guillemets, comme ci-dessous. Cela fonctionne sur ma machine. Sans les guillemets, j'obtiens le même échec que vous.

: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