我正在使用一些我希望可重用的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 =变量的值。
答案 0 :(得分:1)
我做了一个小实验,因为我知道我已经设法得到类似于此的语法,以便在此之前为我工作。我发现如果我复制了你所做的事情,我会收到以下错误:
发生了致命的脚本错误。 无法在为“:r”命令指定的路径中找到目录。
如果相反,我将整个路径放入变量 - 它的工作原理。因此,请尝试将.sql文件更改为:
:r $(PROJECT_FILE_NAME)
并从SQLCMD中调用它:
sqlcmd -S <SERVER> -v PROJECT_FILE_NAME=".\<PROJECTNAME>\init.sql" -i .\start.sql
当我采用这种方法时,它运行文件init.sql
没有错误。