SSMS में एक सापेक्ष पथ प्राप्त करना ऐसा नहीं है कि जब से आप स्क्रिप्ट को निष्पादित नहीं कर रहे हैं, वह सीधे-आगे है; SSMS ने स्क्रिप्ट को मेमोरी में लोड किया है और अपने पाठ को निष्पादित कर रहा है। तो वर्तमान निर्देशिका / फ़ोल्डर डिफ़ॉल्ट प्रक्रिया शुरू करने वाला फ़ोल्डर है। आप इसे SSC में SQLCMD मोड में चलाकर देख सकते हैं:
!! PWD
हालांकि, मुझे ऐसा करने के लिए एक थोड़े-थोड़े तरीके का पता चला। मैं मानता हूं कि ऐसा करने के लिए यह सबसे आदर्श तरीका नहीं है, हालांकि, वर्तमान में यह एक सच्चा रिश्तेदार पथ प्राप्त करने का एकमात्र तरीका है (यह देखते हुए कि पथ को चर में सेट करना वास्तव में "सापेक्ष" नहीं है )।
तो आप क्या कर सकते हैं:
- Foo.sql को खोजने के लिए DOS कमांड निष्पादित करें और उस फ़ाइल में पथ को उस फ़ाइल में एक फ़ोल्डर में संग्रहीत करें जिसे आप SSMS से प्राप्त कर सकते हैं, या तो क्योंकि यह एक हार्ड-कोडेड पथ है या क्योंकि यह एक पर्यावरण चर का उपयोग करता है जो उपलब्ध है SSOS में DOS कमांड और SQLCMD मोड दोनों
- उस फ़ाइल में पथ संग्रहीत करते समय, इसे SQLCMD मोड कमांड के रूप में संग्रहीत करें जो उस पथ पर एक चर सेट करता है
- SSMS का उपयोग करके उस पाठ फ़ाइल को आयात करें
: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
टिप्पणियाँ:
उपरोक्त विधि सिस्टम पर केवल 1 फ़ाइल मानती है जिसका नाम foo.sql है । यदि एक से अधिक फ़ाइल में यह नाम है, तो अंतिम पाया गया पथ सापेक्ष_ path.txt फ़ाइल में पथ सेट किया जाएगा
CD C:\
वसीयत करना C: ड्राइव के मूल में शुरू होगा । यह शायद शुरू करने के लिए सबसे कुशल जगह नहीं है। यदि आपके पास आमतौर पर C: \ Users {YourLogin} \ Documents \ Visual Studio 2013 \ Projects जैसे क्षेत्र में आपकी SQL फाइलें हैं , तो बस CD
गंतव्य के करीब पहुंचने के लिए कमांड बदलें , जैसे:
!! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...