【发布时间】:2016-09-15 09:20:39
【问题描述】:
我正在使用一些我希望可重用的 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 = 变量的值。
【问题讨论】:
-
使用
PRINT $(PROJECT)(没有单引号)会得到什么? -
你怎么知道它不起作用?你收到错误信息了吗?还是应该发生的事情没有发生?如果是这样 - 什么?
-
不,就是这样,如果我使用 :r .\$(PROJECT)\init.sql 它只是跳过它而没有任何消息。但是将 $(PROJECT) 切换为 te 变量值,它会运行另一个脚本。
-
你怎么知道它刚刚跳过它?发生了什么/没有发生什么?这是您正在使用的有效语法 - 我过去自己做过。
-
尝试将“print 'hello!';”行放在 init.sql 的顶部。它会被打印出来吗?如果没有,您在 init.sql 中还有其他 sqlcmd 位吗?也许那里有什么干扰?
标签: sql sql-server sqlcmd