Obtener una ruta relativa en SSMS no es tan sencillo ya que no está ejecutando el script; SSMS ha cargado el script en la memoria y está ejecutando su texto. Por lo tanto, el directorio / carpeta actual es la carpeta de inicio del proceso predeterminado. Puede ver esto ejecutando lo siguiente en modo SQLCMD en SSMS:
!! PWD
Sin embargo, encontré una forma un poco más o menos de hacer esto. Admito que esta no es la forma más ideal de hacer esto, sin embargo, actualmente parece ser la única forma de obtener una ruta relativa verdadera (dado que establecer la ruta en una variable no es realmente "relativa" per se )
Entonces, lo que puedes hacer es:
- Ejecute un comando de DOS para buscar foo.sql y almacenar la ruta a ese archivo en un archivo de texto en una carpeta que puede obtener de SSMS, ya sea porque es una ruta codificada o porque usa una variable de entorno que está disponible para tanto el comando DOS como el modo SQLCMD en SSMS
- Al almacenar la ruta en ese archivo, almacénelo como un comando de modo SQLCMD que establece una variable en esa ruta
- Importe ese archivo de texto en SSMS usando
:r
y establecerá esa variable en la ruta deseada
!! CD C:\ & FOR /F %B IN ('DIR /B /A -HS /S foo.sql') DO ECHO :setvar mypath "%~dpB" > %TEMP%\relative_path.txt
:r $(TEMP)\relative_path.txt
:r $(mypath)\bar.sql
Notas:
El método anterior supone que solo 1 archivo en el sistema se llama foo.sql . Si más de un archivo tiene ese nombre, el último encontrado será la ruta establecida en el archivo relative_path.txt
Hacer CD C:\
esto comenzará en la raíz de la unidad C:. Probablemente este no sea el lugar más eficiente para comenzar. Si generalmente tiene sus archivos SQL en un área como C: \ Users {YourLogin} \ Documents \ Visual Studio 2013 \ Projects , simplemente cambie el CD
comando para acercarse al destino, como:
!! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...