我试图使用SQLCMD.EXE运行一个查询,并且遇到类似部分的问题。
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%'这很好,因为我可以在我的查询中加倍%,但是我已经尝试过%%@%和%%@%%,它们会抛出错误。分别为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 (见这里)运行命令。
发布于 2013-05-25 01:50:17
我不太清楚您对加倍%的理由是什么,但看起来您的目的是在包含@的电子邮件列中找到值。如果是这样,您可以尝试将该子句重写为这样:
WHERE CHARINDEX('@', email) > 0如果是@符号绊倒了事情,那么就用CHAR(64)代替。
WHERE CHARINDEX(CHAR(64), email) > 0发布于 2015-04-30 08:41:11
当使用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%'我在2005年和2008年的SQLServer上测试过这个
https://stackoverflow.com/questions/15071314
复制相似问题