Obter um caminho relativo no SSMS não é tão simples, pois você não está executando o script; O SSMS carregou o script na memória e está executando seu texto. Portanto, o diretório / pasta atual é a pasta inicial do processo padrão. Você pode ver isso executando o seguinte no modo SQLCMD no SSMS:
!! PWD
No entanto, eu encontrei um meio meio de fazer isso. Admito que essa não é a maneira mais ideal de fazer isso, no entanto, atualmente parece ser a única maneira de obter um caminho relativo verdadeiro (dado que definir o caminho em uma variável não é realmente "relativo" por si só )
Então, o que você pode fazer é:
- Execute um comando do DOS para localizar foo.sql e armazene o caminho para esse arquivo em um arquivo de texto em uma pasta que você pode obter do SSMS, seja por ser um caminho codificado ou por usar uma variável de ambiente disponível para o comando DOS e o modo SQLCMD no SSMS
- Ao armazenar o caminho nesse arquivo, armazene-o como um comando no modo SQLCMD que define uma variável para esse caminho
- Importe esse arquivo de texto para o SSMS usando
:r
e ele definirá essa variável para o caminho desejado
!! 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:
O método acima assume que apenas 1 arquivo no sistema é nomeado foo.sql . Se mais de um arquivo tiver esse nome, o último encontrado será o caminho definido no arquivo relative_path.txt
Fazer isso CD C:\
será iniciado na raiz da unidade C : . Este provavelmente não é o lugar mais eficiente para começar. Se você geralmente possui seus arquivos SQL em uma área como C: \ Usuários {YourLogin} \ Documents \ Visual Studio 2013 \ Projects , basta alterar o CD
comando para se aproximar do destino, como:
!! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...