Answers:
在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
笔记:
上面的方法假定系统上只有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 ...
我可能是错的,但我认为这是不可能的。请查看这些链接,以获取他人所做的示例(没有一个是理想的)。
/programming/8753541/how-to-get-the-relative-path-of-file-in-sqlcmd-mode-in-ssms