路径中的SQLCMD变量

时间:2016-09-15 09:20:39

标签: sql sql-server sqlcmd

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

我有一个使用sqlcmd运行sql脚本的bat脚本

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)给出以下错误消息:在此上下文中不允许使用名称“XXX”。有效表达式是常量,常量表达式和(在某些上下文中)变量。不允许使用列名。

XXX =变量的值。

1 个答案:

答案 0 :(得分:1)

我做了一个小实验,因为我知道我已经设法得到类似于此的语法,以便在此之前为我工作。我发现如果我复制了你所做的事情,我会收到以下错误:

  

发生了致命的脚本错误。   无法在为“:r”命令指定的路径中找到目录。

如果相反,我将整个路径放入变量 - 它的工作原理。因此,请尝试将.sql文件更改为:

:r $(PROJECT_FILE_NAME)

并从SQLCMD中调用它:

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

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