การรับพา ธ สัมพัทธ์ใน SSMS ไม่ใช่การส่งต่อโดยตรงเนื่องจากคุณไม่ได้เรียกใช้งานสคริปต์ SSMS ได้โหลดสคริปต์ลงในหน่วยความจำและกำลังดำเนินการข้อความ ดังนั้นไดเรกทอรี / โฟลเดอร์ปัจจุบันจึงเป็นโฟลเดอร์เริ่มต้นกระบวนการเริ่มต้น คุณสามารถเห็นสิ่งนี้ได้ด้วยการรันสิ่งต่อไปนี้ในโหมด SQLCMD ใน SSMS:
!! PWD
อย่างไรก็ตามฉันหาวิธีทำแบบนี้ได้ ฉันยอมรับว่านี่ไม่ใช่วิธีที่ยอดเยี่ยมที่สุดในการทำเช่นนี้อย่างไรก็ตามในขณะนี้ดูเหมือนจะเป็นวิธีเดียวที่จะได้รับเส้นทางสัมพัทธ์ที่แท้จริง (เนื่องจากการตั้งค่าเส้นทางในตัวแปรไม่ใช่ "ญาติ" ต่อ se )
ดังนั้นสิ่งที่คุณสามารถทำได้คือ:
- ดำเนินการคำสั่ง DOS เพื่อค้นหาfoo.sqlและจัดเก็บพา ธ ไปยังไฟล์นั้นในไฟล์ข้อความในโฟลเดอร์ที่คุณได้รับจาก SSMS ไม่ว่าจะเป็นเส้นทางฮาร์ดโค้ดหรือใช้ตัวแปรสภาพแวดล้อมที่มีให้ ทั้งคำสั่ง DOS และโหมด SQLCMD ใน SSMS
- เมื่อเก็บเส้นทางในไฟล์นั้นให้จัดเก็บเป็นคำสั่งโหมด 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 หากมีมากกว่าหนึ่งไฟล์ที่มีชื่อนั้นไฟล์ล่าสุดที่พบจะเป็นพา ธ ที่ตั้งค่าในไฟล์relative_path.txt
การทำCD C:\
จะเริ่มต้นที่รูทของไดรฟ์C: นี่อาจไม่ใช่จุดเริ่มต้นที่มีประสิทธิภาพที่สุด หากคุณมีไฟล์ SQL ของคุณอยู่ในพื้นที่เช่นC: \ Users {YourLogin} \ Documents \ Visual Studio 2013 \ Projectsจากนั้นให้เปลี่ยนCD
คำสั่งเพื่อให้เข้าใกล้ปลายทางมากขึ้นเช่น:
!! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...