语法错误 (操作符丢失) 在查询表达式
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)' 中。
难道语句太长就不行么……
应该改成:"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中)