Komut dosyasını yürütmediğiniz için SSMS'de göreli bir yol elde etmek o kadar da kolay değildir; SSMS komut dosyasını belleğe yükledi ve metnini yürütüyor. Dolayısıyla, geçerli dizin / klasör varsayılan işlem başlangıç klasörüdür. SSMS'de SQLCMD modunda aşağıdakileri çalıştırarak bunu görebilirsiniz:
!! PWD
Ancak bunu yapmanın bir tür yolunu buldum. Bunun bunu yapmanın en ideal yolu olmadığını itiraf ediyorum, ancak şu anda gerçek bir göreceli yol almanın tek yolu gibi görünüyor (bir değişkende yolu ayarlamanın gerçekten "göreceli" olmadığı göz önüne alındığında, ).
Yani yapabileceğiniz şey:
- Foo.sql dosyasını bulmak için bir DOS komutu yürütün ve bu dosyanın yolunu, sabit kodlanmış bir yol olduğu veya kullanılabilen bir ortam değişkeni kullandığı için SSMS'den alabileceğiniz bir klasördeki bir metin dosyasına depolayın SSMS'de hem DOS komutu hem de SQLCMD moduna
- Yolu bu dosyaya kaydederken, SQLCMD modu komutu olarak saklayın ve bu yola bir değişken ayarlar
- Bu metin dosyasını kullanarak SSMS'ye aktarın
:r
ve bu değişkeni istenen yola ayarlayacaktır.
!! 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
Notlar:
Yukarıdaki yöntem, sistemdeki yalnızca 1 dosyanın foo.sql olarak adlandırıldığını varsayar . Birden fazla dosya bu ada sahipse, bulunan son dosya relative_path.txt dosyasında ayarlanan yol olur
Bunu yapmak C: sürücüsünün CD C:\
kökünden başlar . Bu muhtemelen başlamak için en verimli yer değil. SQL dosyalarınızı genellikle C: \ Users {YourLogin} \ Documents \ Visual Studio 2013 \ Projects gibi bir alanınız varsa , hedefe yaklaşmak için komutu değiştirin , örneğin:CD
!! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...