我正在尝试使用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)
答案 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