语法错误 (操作符丢失) 在查询表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语法错误 (操作符丢失) 在查询表达式相关的知识,希望对你有一定的参考价值。

错误类型:
Microsoft JET Database Engine (0x80040E14)
语法错误 (操作符丢失) 在查询表达式 'ispass=1 and isdel=0 and islock=0 and isopen=1 and dept_id=() and dept_num=()' 中。

错误代码处
dim deptids,deptnums
deptids =session("dept_id")
deptnums=session("dept_num")

set rs=server.Createobject ("adodb.recordset")
if channelID<>"" then
sql="select * from news where ("&sql&") and dept_id=("&deptids&") and dept_num=("&deptnums&") and ispass=1 and isdel=0 and islock=0 and isopen=1 order by istop desc, newsid desc"
else
sql="select * from news where ispass=1 and isdel=0 and islock=0 and isopen=1 and dept_id=("&deptids&") and dept_num=("&deptnums&") order by istop desc, newsid desc"
end if
rs.open sql,conn,1,1
if rs.eof and rs.bof then
response.write ""
改成:
sql="select * from news where ispass=1 and isopen=1 and and isdel=0 and islock=0 dept_id in ("&deptids&") and dept_num in ("&deptnums&") order by istop desc, newsid desc"

语法错误 (操作符丢失) 在查询表达式 'ispass=1 and isopen=1 and and isdel=0 and islock=0 dept_id in (2) and dept_num in (1)' 中。
难道语句太长就不行么……

1 字符串的查询语句不是打括号,而是打单引号。
应该改成:"dept_id='"& deptids & "'"

如果参数deptids有多个,需要用逗号连接的形式(如:'A','B','C' 注意要单引号,如果不是字符串格式,就直接是A,B,C就可以了),SQL语句需改成"dept_id in ("& deptids & ")"

2 sql="select * from news where ("&sql&") and dept_id=("&deptids&") and dept_num=("&deptnums&") and ispass=1 and isdel=0 and islock=0 and isopen=1 order by istop desc, newsid desc"
这一句中的 ("& sql &")是不是搞错了,和现在这个字符串名字(sql)是一样的。

-----------------------------------------

看样子dept_id 和 dept_num是数字型。
把dept_id=(xxx) 和 dept_num=(xxx)改成
dept_id in (),dept_num in ()

并且需要判断deptids 和 deptnums是否为空,如果为空,就不要加到判断条件里。

另外deptids 和 deptnums 是不是指有多个?如果是多个,需要用逗号分开。
参考技术A 汗。。空格。。
between
'00:00:00'and'
08:00:00
'and
and
和其他数据项要有空格。。。
参考技术B sql="select
*
from
dept
where
d_number="&d_number改成sql="select
*
from
dept
where
d_number='&+d_number+&'"我记得大概是这样,
SQL语句
里用变量的格式。你再仔细
查查
就知道了。
参考技术C 你这个可以用Access自动生成SQL语句啊,新建查询向导,然后选择要查询的表和列就可以了.

SQL 中删除语法的问题 - 当子查询没有与 EXISTS 一起引入时,错误只能在选择列表中指定一个表达式

【中文标题】SQL 中删除语法的问题 - 当子查询没有与 EXISTS 一起引入时,错误只能在选择列表中指定一个表达式【英文标题】:Problem with delete syntax in SQL - Error Only one expression can be specified in the select list when the subquery is not introduced with EXISTS 【发布时间】:2019-04-03 00:07:30 【问题描述】:

我有这个 SQL 查询:

SELECT NumeroReloj, Badgenumber, Name, lastname, DEFAULTDEPTID
FROM [PBS].[dbo].[CAT_Empleados]
RIGHT JOIN [AccessControl].[dbo].[USERINFO]
ON [PBS].[dbo].[CAT_Empleados].[NumeroReloj] = [AccessControl].[dbo].[USERINFO].[Badgenumber] COLLATE Chinese_PRC_CI_AS
WHERE [AccessControl].[dbo].[USERINFO].[Badgenumber] COLLATE Chinese_PRC_CI_AS NOT IN (SELECT [NumeroReloj] FROM [PBS].[dbo].[CAT_Empleados])

有2个数据库,2个不同名字的表。

通过该查询,我得到了一些在表 [AccessControl].[dbo].[USERINFO] 中但不在表 [PBS].[dbo].[CAT_Empleados] 中的用户。

[AccessControl].[dbo].[USERINFO] 的 Employee# 列被命名为“Badgenumber”,[PBS].[dbo].[CAT_Empleados] 的 Employee# 列被命名为“NumeroReloj”(就是这样匹配两个结果)。

嗯,该查询运行良好,现在我想在 [AccessControl].[dbo].[USERINFO] 中删除与该 Select 查询相同的结果。我试过了:

DELETE 
FROM [AccessControl].[dbo].[USERINFO] 
WHERE [AccessControl].[dbo].[USERINFO].[Badgenumber] IN (SELECT * FROM [PBS].[dbo].[CAT_Empleados] RIGHT JOIN [AccessControl].[dbo].[USERINFO] ON [PBS].[dbo].[CAT_Empleados].[NumeroReloj] = [AccessControl].[dbo].[USERINFO].[Badgenumber] COLLATE Chinese_PRC_CI_AS WHERE [AccessControl].[dbo].[USERINFO].[Badgenumber] COLLATE Chinese_PRC_CI_AS NOT IN (SELECT [NumeroReloj] FROM [PBS].[dbo].[CAT_Empleados])

但我收到此错误消息:

Msg 116, Level 16, State 1, Line 3 只能使用一个表达式 未引入子查询时在选择列表中指定 存在。

【问题讨论】:

【参考方案1】:

您遇到的问题是您的删除语句,您要求在返回多个字段的子查询中仅删除带有徽章编号的员工,如“*”所示。所以 SQL 不知道您希望将 badgenumber 与什么进行比较。

更改子查询中的“*”以匹配 1 个字段,即您要与徽章编号进行比较的字段。

【讨论】:

谢谢你 alex067,它有效。我刚刚将 * 更改为 Badgenumber。

以上是关于语法错误 (操作符丢失) 在查询表达式的主要内容,如果未能解决你的问题,请参考以下文章

语法错误 (操作符丢失) 在查询表达式

ASP语法错误 (操作符丢失) 在查询表达式 'PaperId=' 中。

帮忙挑毛病 C# asp.net “语法错误 (操作符丢失) 在查询表达式''中”错误

MS Acess不支持多个left join(语法错误(操作符丢失)在查询表达式 xx中)

LEFT JOIN连接SQL语句在Access里面报语法错误(操作符丢失),哪位帮帮忙?

语法错误。在查询表达式中-Delphi