Mendapatkan jalur relatif dalam SSMS tidak semudah itu karena Anda tidak menjalankan skrip; SSMS telah memuat skrip ke dalam memori dan mengeksekusi teksnya. Jadi direktori / folder saat ini adalah proses awal folder awal. Anda dapat melihat ini dengan menjalankan yang berikut ini dalam mode SQLCMD di SSMS:
!! PWD
Namun, saya memang menemukan cara yang agak agak untuk melakukan ini. Saya akui bahwa ini bukan cara super-paling ideal untuk melakukan ini, namun, saat ini tampaknya menjadi satu-satunya cara untuk mendapatkan path relatif yang sebenarnya (mengingat bahwa menetapkan path dalam variabel tidak benar-benar "relatif" per se ).
Jadi yang dapat Anda lakukan adalah:
- Jalankan perintah DOS untuk menemukan foo.sql dan simpan path ke file itu dalam file teks dalam folder yang bisa Anda dapatkan dari SSMS, baik karena itu adalah lintasan kode keras atau karena ia menggunakan variabel lingkungan yang tersedia untuk perintah DOS dan mode SQLCMD dalam SSMS
- Saat menyimpan path dalam file itu, simpan sebagai perintah mode SQLCMD yang menetapkan variabel ke path itu
- Impor file teks itu ke dalam SSMS menggunakan
:r
dan itu akan mengatur variabel itu ke jalur yang diinginkan
!! 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
Catatan:
Metode di atas mengasumsikan hanya 1 file pada sistem bernama foo.sql . Jika lebih dari satu file memiliki nama itu, yang terakhir ditemukan adalah path yang ditetapkan dalam file relative_path.txt
Melakukan hal itu CD C:\
akan dimulai dari root drive C : . Ini mungkin bukan tempat yang paling efisien untuk memulai. Jika Anda umumnya memiliki file SQL di area seperti C: \ Users {YourLogin} \ Documents \ Visual Studio 2013 \ Projects , maka ubah saja CD
perintah untuk lebih dekat ke tujuan, seperti:
!! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...