我正在尝试使用 SQLCMD.EXE 运行查询,但 LIKE 部分有问题。
WHERE email LIKE '%%@%%'
我认为这是 cmd 提示而不是 SQLCMD.EXE 的错误,因为我收到了错误:
Syntax error "@%'"
我通过指向 bat 文件的 Notepad++ (NppExec) 运行它,如下所示:
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%'
这很好,因为我可以%
在查询中加倍,但我已经尝试过%%@%
并且%%@%%
它们会抛出错误。Syntax error "@'""
或Syntax error "@%'""
,分别。
此外,变量的原因是我包含了一些逻辑,因此它可以检测表名并针对不同的服务器和数据库运行。
这是bat文件
set sql=%1
iff %@index[%sql%,sur_] GT -1 THEN
SET SERVER=server1
SET table=tablename
SET pass=password
else
SET SERVER=server2
SET table=tablename
SET pass=password
endiff
SQLCMD.EXE -U usr -P %pass% -S %server% -Q %sql% -d %table%
奇怪语法的原因是由于命令通过 TCC/LE 运行(见这里)