【问题标题】:SQLCMD Syntax error when running script that runs fine in management studio运行在管理工作室中运行良好的脚本时出现 SQLCMD 语法错误
【发布时间】:2010-03-17 18:31:19
【问题描述】:

当我在 SQL Management Studio 2008 中运行 select '$(''test'')' 时,它返回 $('test')

当我在命令行上运行sqlcmd -S SERVER -E -d DATABASE -q "select $(''test'')" 时,它返回Sqlcmd: Error: Syntax error at line 1 near command '''.

如果我删除美元符号,它会起作用。 “$”是特殊字符吗?

这是一个 sqlcmd 错误吗?如何更改脚本以获得所需的结果。

【问题讨论】:

  • 我仍然对@KM 感到困惑,为什么您要从sqlcmd 向SQL Server 发送SELECT $(''test'') 而您要从SSMS 发送SELECT '$(''test'')'
  • 我不确定为什么这 2 个语句在这种方式上有所不同。这是通过查询从表中发送 javascript 的遗留代码。我需要能够从命令行上的脚本创建数据库,并且遇到了 sqlcmd 变量的问题。

标签: sql-server sql-server-2008 sqlcmd


【解决方案1】:

是的,$(id) 在 SQLCMD 中有特殊的语义:它是一个变量替换。您可以运行以下命令:

sqlcmd /E /S . /v variable=MyTable /Q "select * from $(variable)"

这将从 MyTable 中选择。如您所料,/v 是定义变量的开关。另一方面,默认情况下,SSMS 不会解释用于变量替换的 SQL。通过选中“在 SQLCMD 模式下打开查询窗口”选项,可以使 SSMS 执行此操作。

模式详情见Using sqlcmd with Scripting Variables

【讨论】:

  • 谢谢,这就是我需要知道的。 -x 开关禁用变量,所以这有效: sqlcmd -S SERVER -E -d DATABASE -x -q "select $(''test'')"
  • 谢谢。我需要知道如何使用 -x 参数禁用变量。我在一个巨大的副本上遇到错误,直到现在才找到原因。
  • @Brain2000 如果您有任何问题,请发表问题,而不是发表评论。
  • @RemusRusanu 我的问题和特洛伊的一样。我感谢 Troy 提供了如何使用 -x 参数禁用变量替换,因为这是我需要的答案。
【解决方案2】:

您尝试运行的命令:

select $('test')

无效。正如您所注意到的,当您删除“$”时,它会起作用:

select ('test')

我不确定你真正想要做什么,你有三个 " 双引号字符,你可以尝试使用这个命令:

select '$(test)'

应该是:

sqlcmd -S SERVER -E -d DATABASE -q "select ''$(test)''"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2010-09-05
    • 2014-03-28
    • 2022-01-26
    相关资源
    最近更新 更多