Comment obtenir le chemin relatif du fichier en mode SQLCMD dans SSMS?
J'ai le dessous de master script qui crée les tables, et insère les données et crée ensuite les procédures stockées.
--todo_master.sql
use master
go
:r todo_create_ddl.sql
:r todo_create_dml.sql
:r todo_create_sprocs.sql
go
Cependant, même si la todo_master.sql est le même chemin que les trois autres scripts, il est impossible de localiser ces trois scripts.
J'obtiens l'erreur suivante:
A fatal scripting error occurred.
The file specified for :r command was not found.
Si je fournir le chemin complet comme ci-dessous, ces fichiers sont trouvé et exécuté comme prévu.
"C:\Docs and Settings\user\My Docs\SSMS\Projects\todo_create_ddl.sql"
Ce que je pourrais être absent?
Modifier
Comme suggéré par Jason, j'ai essayé ceci, mais toujours la même erreur:
use master
go
:setvar path "C:\Documents and Settings\user\My Documents\SQL Server Management Studio\Projects"
:setvar ddl "todo_create_ddl.sql"
:setvar dml "todo_create_dml.sql"
:setvar sprocs "todo_create_sprocs.sql"
:r $(path)$(ddl)
:r $(path)$(dml)
:r $(path)$(sprocs)
go
source d'informationauteur Animesh
Vous devez vous connecter pour publier un commentaire.
Vous pouvez contourner cela en utilisant le sqlcmd
setvar
option pour attribuer le chemin d'accès à une variable. Ensuite, utilisez cette variable dans votre:r
appel comme:Ce lien a un plus en profondeur exemple:
http://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
Avec cela en place, vous pouvez supprimer le setvar ligne et le passer en ligne de commande avec:
Ce serait le travail autour de la question de l'script ne fonctionne pas dans le répertoire où le premier SQL script a été appelé à partir.
Je réalise que c'est assez vieux, mais j'ai remarqué une erreur dans votre Édité code: vous devez inclure une barre oblique inverse entre le chemin et le nom du script.
J'ai trouvé, que ce serait la meilleure:
Vous devez mettre les états avec un espace entre guillemets, mais pas l'intégralité de la déclaration. C'est pourquoi vous pouvez faire
C:\"some path"
Obtenir un chemin relatif dans SSMS n'est pas simple puisque vous n'êtes pas l'exécution du script; SSMS a chargé le script dans la mémoire et de l'exécution de son texte. Donc l'actuel répertoire/dossier est le processus par défaut le dossier de départ. Vous pouvez voir cela en exécutant la commande suivante en mode SQLCMD dans SSMS:
Cependant, j'ai trouvé un peu-sorta façon de le faire. J'avoue que ce n'est pas le super-plus moyen idéal de le faire, cependant, il semble être actuellement le seul moyen d'obtenir un vrai chemin d'accès relatif (étant donné que la définition du chemin d'accès à une variable n'est pas vraiment "relative" à proprement parler).
Ce que vous pouvez faire est:
:r
et il va mettre cette variable à la trajectoire souhaitéeNotes:
La méthode ci-dessus suppose seulement 1 fichier sur le système est nommé todo_master.sql. Si plus d'un fichier de ce nom, le dernier sera le chemin d'accès défini dans le relative_path.txt fichier
Faire la
CD C:\
va commencer à la racine de la C: lecteur. Ce n'est probablement pas le meilleur endroit pour commencer. Si vous avez vos fichiers SQL dans un domaine comme C:\Users{Votrecompte}\Documents\Visual Studio 2013\Projetsalors il suffit de changer leCD
commande pour se rapprocher de la destination, telles que:J'ai eu ce même problème moi-même et j'espère que je ne suis pas une lapalissade - pourquoi ne pas ouvrir un Dos/Cmd ou PowerShell exemple,
cd
dans le répertoire contenant les scripts, puis la Gestion de la charge de Studio à partir de là?J'ai cet alias dans mon PowerShell set-up (le chemin peut varier):
Je puis
cd
le dossier contenant le fichier de solution, alors je neUtiliser un fichier batch comme une aide.
Modifier todo_master.sql pour utiliser une variable d'environnement appelée
mypath
:Et dans votre fichier de commandes
todo_master.bat