【问题标题】:SQLCMD variable in path路径中的 SQLCMD 变量
【发布时间】: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


【解决方案1】:

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

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

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

:r $(PROJECT_FILE_NAME)

并像这样从 SQLCMD 调用它:

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

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

【讨论】:

  • 我也试过了,如果我在变量中传递完整路径,它工作正常,但在这种情况下我不想这样做。我找到了另一个关于如何在 sqlcmd 中连接变量的解决方案。 :r ".\"$(PROJECT)"\register.sql" 这是此论坛帖子social.msdn.microsoft.com/Forums/sqlserver/en-US/… 上的标记答案
猜你喜欢
  • 2016-05-11
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多