首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLCMD使用“%@%”

SQLCMD使用“%@%”
EN

Stack Overflow用户
提问于 2013-02-25 16:14:28
回答 2查看 4.1K关注 0票数 4

我试图使用SQLCMD.EXE运行一个查询,并且遇到类似部分的问题。

代码语言:javascript
复制
WHERE email LIKE '%%@%%'

我认为这是cmd提示符的错误,而不是SQLCMD.EXE,因为我得到了错误:

代码语言:javascript
复制
Syntax error "@%'"

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

代码语言:javascript
复制
H:\scripts\SQL.bat "$(CURRENT_WORD)"

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

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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 (见这里)运行命令。

EN

回答 2

Stack Overflow用户

发布于 2013-05-25 01:50:17

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

代码语言:javascript
复制
WHERE CHARINDEX('@', email) > 0

如果是@符号绊倒了事情,那么就用CHAR(64)代替。

代码语言:javascript
复制
WHERE CHARINDEX(CHAR(64), email) > 0
票数 1
EN

Stack Overflow用户

发布于 2015-04-30 08:41:11

当使用sqlcmd运行查询时,我发现将删除%符号。假设您的查询是:

代码语言:javascript
复制
SELECT name FROM table WHERE name LIKE 'test%'

sqlcmd将将您的查询读入

代码语言:javascript
复制
SELECT name FROM table WHERE name LIKE 'test'

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

代码语言:javascript
复制
SELECT name FROM table WHERE name LIKE 'test%%'

你就会得到结果

代码语言:javascript
复制
SELECT name FROM table WHERE name LIKE 'test%'

我在2005年和2008年的SQLServer上测试过这个

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15071314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档