路径中的 SQLCMD 变量

SQLCMD variable in path

我正在使用一些我希望可重用的 SQL 脚本,因此我需要使用一些变量。

我有一个 bat 脚本 运行 sql 带有 sqlcmd

的脚本
sqlcmd -S <SERVER> -v PROJECT="<PROJECTNAME>" -i .\start.sql

在 start.sql 脚本中,我执行另一个 sql 脚本,如下所示:

:r .\<PROJECTNAME>\init.sql

所以我对变量的值进行了硬编码并且效果很好。我想使用变量本身,但我无法让它工作。

:r .$(PROJECT)\init.sql

这里的最后一行是我认为可行的。我已经通过这样做测试打印出变量 PROJECT 中的值:

PRINT '$(PROJECT)'

这给了我变量的值。

希望有人能帮助我使用变量来执行文件夹中的脚本。

提前致谢。

编辑: PRINT $(PROJECT) 出现以下错误 message:The 名称 "XXX" 在此上下文中是不允许的。有效表达式是常量、常量表达式和(在某些上下文中)变量。不允许列名。

XXX = 变量的值。

我做了一个小实验,据我所知,我已经设法获得了与此类似的语法来为我工作。我发现如果我复制你所做的,我会得到以下错误:

A fatal scripting error occurred. Cannot find directory in the path specified for ":r" command.

相反,我将整个路径放入变量中 - 它有效。因此,请尝试将您的 .sql 文件更改为:

:r $(PROJECT_FILE_NAME)

并像这样从 SQLCMD 调用它:

sqlcmd -S <SERVER> -v PROJECT_FILE_NAME=".\<PROJECTNAME>\init.sql" -i .\start.sql

当我采用这种方法时,运行 文件 init.sql 没有错误。