You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server 2019中获取运行的.sql文件所在目录?

在SQL Server 2019中运行脚本时输出其所在目录路径的方法

方法1:直接硬编码输出(简单直接)

如果脚本的存储路径固定不变,直接在脚本开头添加输出语句即可:

PRINT '当前脚本所在目录:c:\project_abc\sql\list';
-- 后续原有SQL语句

也可以用SELECT输出:

SELECT '当前脚本所在目录:c:\project_abc\sql\list' AS ScriptDirectory;
-- 后续原有SQL语句

方法2:使用SQLCMD模式(动态获取路径,推荐)

SSMS支持SQLCMD模式,利用内置变量可动态获取当前脚本的完整路径,再提取目录部分:

  1. 先在SSMS中启用SQLCMD模式:点击菜单栏「查询」→「SQLCMD模式」
  2. 在脚本开头添加以下代码:
-- 获取当前脚本的完整路径
:setvar ScriptPath "$(SQLPATH)"
-- 提取目录部分(去除文件名)
DECLARE @ScriptDir NVARCHAR(256) = LEFT('$(ScriptPath)', LEN('$(ScriptPath)') - CHARINDEX('\', REVERSE('$(ScriptPath)')));
PRINT '当前脚本所在目录:' + @ScriptDir;
-- 后续原有SQL语句

说明:$(SQLPATH)是SQLCMD内置变量,会自动填充当前运行脚本的完整路径(含文件名),通过字符串处理可提取出目录部分。

方法3:利用系统存储过程(需权限,不推荐)

若无法使用SQLCMD模式,可尝试扩展存储过程,但需要对应权限(如xp_cmdshell需启用并授权),示例如下:

DECLARE @Cmd NVARCHAR(256) = 'echo %~dp0';
DECLARE @ScriptDir NVARCHAR(256);
CREATE TABLE #TempOutput (OutputText NVARCHAR(256));
INSERT INTO #TempOutput EXEC xp_cmdshell @Cmd;
SELECT @ScriptDir = OutputText FROM #TempOutput WHERE OutputText IS NOT NULL;
PRINT '当前脚本所在目录:' + @ScriptDir;
DROP TABLE #TempOutput;
-- 后续原有SQL语句

注意:该方法依赖操作系统命令行,且xp_cmdshell默认禁用,需管理员启用,安全性较低,不建议在生产环境使用。

内容的提问来源于stack exchange,提问作者srh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:55:17