2010-03-17 114 views
3

当我在SQL管理运行这个select '$(''test'')' 2008工作室返回$('test')SQLCMD语法错误

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

如果我删除它的工作美元符号。 “$”是一个特殊字符吗?

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

+0

我仍然对@KM感到困惑,你为什么要从'sqlcmd'向SQL Server发送'SELECT $(''test'')'而你发送'SELECT'$(''test' ')'来自SSMS。 – binki 2013-09-16 19:38:51

+0

我不知道为什么这两个陈述是不同的那种方式。这是通过查询从表格发送javascript的遗留代码。我需要能够在命令行上通过脚本创建数据库,并且遇到了sqlcmd变量的问题。 – Troy 2013-10-01 12:23:07

回答

14

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

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

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

有关模式的详细信息,请参阅Using sqlcmd with Scripting Variables

+6

谢谢,这就是我需要知道的。 -x开关禁用变量,因此它可以工作:sqlcmd -S SERVER -E -d DATABASE -x -q“select $(''test'')” – Troy 2010-03-17 18:58:50

+0

谢谢。我需要知道如何使用-x参数禁用变量。我在一个巨大的副本上遇到了一个错误,并且直到现在都找不到原因。 – Brain2000 2013-07-12 16:13:10

+0

@ Brain2000如果您有任何问题,请发表问题,而不是发表评论。 – 2013-07-12 18:32:27

0

命令你正在尝试运行:

select $('test') 

无效。当你注意,当你删除“$”它的工作原理:

select ('test') 

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

select '$(test)' 

具体做法是:

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