Jus*_*ing 11 sql-server ssms sqlcmd ssdt
如果我在同一个文件夹中有 foo.sql 和 bar.sql,则 foo.sql 在 sqlcmd 模式下从 SSDT 运行时可以引用 bar.sql :r ".\bar.sql"。但是,SSMS 不会找到它。Procmon 显示 SSMS 正在寻找%systemroot%\syswow64:

如何告诉 SSMS 在不显式声明路径的情况下查看当前脚本保存到的文件夹?
在 SSMS 中获取相对路径并不是那么简单,因为您没有执行脚本;SSMS 已将脚本加载到内存中并正在执行其文本。所以当前目录/文件夹是默认的进程启动文件夹。您可以通过在 SSMS 中以 SQLCMD 模式运行以下命令来查看这一点:
!! PWD
Run Code Online (Sandbox Code Playgroud)
但是,我确实找到了一种方法来做到这一点。我承认这不是最理想的方法,但是,它目前似乎是获得真正相对路径的唯一方法(鉴于在变量中设置路径本身并不是真正的“相对” )。
所以你可以做的是:
:r,它将将该变量设置为所需的路径!! PWD
Run Code Online (Sandbox Code Playgroud)
笔记:
上述方法假设系统上只有 1 个文件名为foo.sql。如果多个文件具有该名称,则找到的最后一个将是在relative_path.txt文件中设置的路径
这样做CD C:\将从C:驱动器的根目录开始。这可能不是最有效的起点。如果您的 SQL 文件通常位于C:\Users{YourLogin}\Documents\Visual Studio 2013\Projects 等区域,则只需更改CD命令以更接近目标,例如:
!! 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
Run Code Online (Sandbox Code Playgroud)我可能是错的,但我认为这是不可能的。请参阅这些链接以获取其他人所做的示例(没有一个是理想的)。
| 归档时间: |
|
| 查看次数: |
5153 次 |
| 最近记录: |