如何在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模式,利用内置变量可动态获取当前脚本的完整路径,再提取目录部分:
- 先在SSMS中启用SQLCMD模式:点击菜单栏「查询」→「SQLCMD模式」
- 在脚本开头添加以下代码:
-- 获取当前脚本的完整路径 :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
相关产品推荐
相关产品推荐

