SQLCMD使用LIKE'%@%'

时间:2013-02-25 16:14:28

标签: variables batch-file escaping notepad++ sqlcmd

我正在尝试使用SQLCMD.EXE运行查询,并且在LIKE部分出现问题。

WHERE email LIKE '%%@%%'

我认为这是一个错误的cmd提示而不是SQLCMD.EXE,因为我收到错误:

Syntax error "@%'"

我通过Notepad ++(NppExec)运行这个指向bat文件,如下所示:

H:\scripts\SQL.bat "$(CURRENT_WORD)"

这会导致查询在被SQLCMD.EXE调用使用之前用双引号括起来。然后SQLCMD.EXE调用在bat文件中运行,如下所示:

SQLCMD.EXE -U user -P %pass% -S %server% -Q %sql% -d %table%

除了LIKE '%%@%%'部分之外,它对我使用的任何查询都很有效。

更新

我已经做了一些测试,并认为我已将其缩小为%@的问题。

所以像这样的查询工作正常:

  • SELECT name FROM table WHERE name LIKE 'test'
  • SELECT name FROM table WHERE name LIKE 'test%'
  • SELECT name FROM table WHERE name LIKE '%%test'

但这会导致错误:

  • SELECT name FROM table WHERE name LIKE '%test'
  • SELECT name FROM table WHERE name LIKE '%test%'

这很好,因为我可以在查询中加倍%,但我已经尝试了%%@%%%@%%并且他们会抛出错误。 <{1}}或Syntax error "@'""

此外,变量的原因是我包含了一些逻辑,因此它可以检测表名并运行不同的服务器和数据库。

这是bat文件

Syntax error "@%'""

语法奇怪的原因是由于命令是通过TCC / LE运行(see here)

2 个答案:

答案 0 :(得分:1)

我不太清楚你将%加倍的原因是什么,但看起来你的意图是在电子邮件列中找到包含@的值。如果是这样,您可以尝试重写该子句:

WHERE CHARINDEX('@', email) > 0

如果是@符号正在绊倒,请改用CHAR(64)

WHERE CHARINDEX(CHAR(64), email) > 0

答案 1 :(得分:0)

使用sqlcmd运行查询时,我发现%符号将被删除。让我们说你的查询是:

SELECT name FROM table WHERE name LIKE 'test%'

sqlcmd将您的查询读作

SELECT name FROM table WHERE name LIKE 'test'

因此sqlcmd不会过滤您的结果。请使用%%进行查询

SELECT name FROM table WHERE name LIKE 'test%%'

你会得到结果

SELECT name FROM table WHERE name LIKE 'test%'

我在SQLServer 2005&amp; 2008