답변:
스크립트를 실행하지 않기 때문에 SSMS에서 상대 경로를 얻는 것은 그리 간단하지 않습니다. SSMS가 스크립트를 메모리에로드하고 해당 텍스트를 실행 중입니다. 따라서 현재 디렉토리 / 폴더가 기본 프로세스 시작 폴더입니다. SSMS의 SQLCMD 모드에서 다음을 실행하여이를 확인할 수 있습니다.
!! PWD
그러나 나는 이것을 할 수있는 약간의 방법을 찾았습니다. 나는 이것이 가장 이상적인 이상적인 방법은 아니라는 것을 인정하지만, 현재 진정한 상대 경로 를 얻는 유일한 방법 인 것 같습니다 (변수에서 경로를 설정하는 것이 실제로 "상대적"이 아닌 경우) ).
그래서 당신이 할 수있는 일은 :
: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
노트:
위의 방법은 시스템의 파일 하나만 foo.sql 이라고 가정 합니다. 둘 이상의 파일에 해당 이름이있는 경우 마지막으로 찾은 파일 은 relative_path.txt 파일에 설정된 경로입니다.
지내요 CD C:\
의 루트에서 시작됩니다 C : 드라이브를. 이곳은 시작하기에 가장 효율적인 장소는 아닙니다. 일반적으로 C : \ Users {YourLogin} \ Documents \ Visual Studio 2013 \ Projects 와 같은 영역에 SQL 파일이있는 경우 CD
명령을 변경하여 다음 과 같이 대상에 더 가깝게하십시오.
!! CD C:\Users\{YourLogin}\Documents\Visual Studio 2013 & FOR ...
나는 틀릴 수는 있지만 가능하다고 생각하지 않습니다. 다른 사람들이 한 일에 대한 예는이 링크를 참조하십시오.
/programming/8753541/how-to-get-the-relative-path-of-file-in-sqlcmd-mode-in-ssms