注册 登录
编程论坛 SQL Server论坛

出现错误

guixm1998 发布于 2016-11-08 11:40, 3771 次点击
在VB中使用Sql = "update aa1 set aa1.职称=aa.职称 from aa1inner join aa on aa1.姓名=aa.姓名",出现操作符丢失,在查询表达式中,怎么解决?很急,谢谢
15 回复
#2
mywisdom882016-11-08 12:44
update aa1 set aa1.职称=aa.职称 from aa1 inner join aa on aa1.姓名=aa.姓名
查这类问题,你可以把语句直接放到 SQL分析器上运行,看看。
#3
mywisdom882016-11-08 23:35
以下是引用guixm1998在2016-11-8 11:40:43的发言:

在VB中使用Sql = "update aa1 set aa1.职称=aa.职称 from aa1 inner join aa on aa1.姓名=aa.姓名",出现操作符丢失,在查询表达式中,怎么解决?很急,谢谢
inner join 相当 where,你改为
update aa1 set aa1.职称=aa.职称 from aa where aa1.姓名=aa.姓名

要是你查询,以下2个句子是相等的
select aa1.*,aa.职称 from aa1
inner join aa on aa1.姓名=aa.姓名

select aa1.*,aa.职称 from aa1,aa
where aa1.姓名=aa.姓名
#4
guixm19982016-11-09 13:15
Private Sub Command1_Click()
Dim db As Database
Set db = OpenDatabase(App.Path + "\db.mdb")
Sql = "update aa1 set aa1.职称=aa.职称 from aa1,aa where aa1.姓名=aa.姓名"
db.Execute Sql
End Sub

你好,两个表中都有数据,只是把aa1中的职称数据更新为aa中的职称,运行后,但aa.姓名是空的,而且aa.职称是空的,所以会出现操作符丢失,在查询表达式中,但我不知道怎么解决,请教高手。谢谢
#5
厨师王德榜2016-11-09 13:59
你的语句是 from aa1inner join aa  
是不是应该加个空格: from aa1 inner join aa
#6
mywisdom882016-11-09 16:20
以下是引用guixm1998在2016-11-9 13:15:28的发言:

Private Sub Command1_Click()
Dim db As Database
Set db = OpenDatabase(App.Path + "\db.mdb")
Sql = "update aa1 set aa1.职称=aa.职称 from aa1,aa where aa1.姓名=aa.姓名"
db.Execute Sql
End Sub

你好,两个表中都有数据,只是把aa1中的职称数据更新为aa中的职称,运行后,但aa.姓名是空的,而且aa.职称是空的,所以会出现操作符丢失,在查询表达式中,但我不知道怎么解决,请教高手。谢谢

sql2000的是这样的语法的,不知道你的 是 from aa,不是from aa1,aa
Sql = "update aa1 set aa1.职称=aa.职称 from aa where aa1.姓名=aa.姓名"

#7
guixm19982016-11-09 16:30
用Sql = "update aa1 set aa1.职称=aa.职称 from aa where aa1.姓名=aa.姓名" 出现操作符丢失,在查询表达式中,怎么解决?很急,谢谢
#8
mywisdom882016-11-09 16:54
你的是什么数据库?
上面的语句,在SQL2000数据库上是正常的。
#9
mywisdom882016-11-09 17:03
--在SQL2000数据库上测试
create table aa(姓名 varchar(10),职称 varchar(10))
insert into aa
select '张三','老师' union all
select '李四','教授' union all
select '赵七','教授' union all
select '王五','职工'

create table aa1(姓名 varchar(10),职称 varchar(10),班级 varchar(10))
insert into aa1
select '张三','','高二' union all
select '李四','','高三' union all
select '王五','','高一' union all
select '陈六','','高一'

--更新前
select * from aa
select * from aa1

--更新
update aa1 set aa1.职称=aa.职称 from aa where aa1.姓名=aa.姓名

--更新后
select * from aa1

--删除表
drop table aa
drop table aa1
只有本站会员才能查看附件,请 登录
#10
mywisdom882016-11-09 17:12
update aa1 set aa1.职称=aa.职称 from aa1 inner join aa on aa1.姓名=aa.姓名
你这句话,在SQL2000上运行也是正常的,估计你的问题在数据库上,不知道你用的是什么数据库,你可以运行简单的看看,如

Sql = "select * from aa1"
这个简单的,语法绝对正确的,看看有没问题
#11
guixm19982016-11-09 21:58
你好,我是用VB编写的
#12
guixm19982016-11-09 21:59
你好,我是用VB+access编写的
#13
guixm19982016-11-09 22:10
Private Sub Command1_Click()
Dim db As Database
Set db = OpenDatabase(App.Path + "\db.mdb")
Sql = "update aa1 set aa1.职称=aa.职称 from aa1,aa where aa1.姓名=aa.姓名"
db.Execute Sql
End Sub

你好,两个表中都有数据,只是把aa1中的职称数据更新为aa中的职称,运行后,但aa.姓名是空的,而且aa.职称是空的,所以会出现操作符丢失,在查询表达式中,但我不知道怎么解决,请教高手。谢谢!

用DAO
两个表中的表结构如下:
Set td = db.CreateTableDef(mtable)
With td
     .Fields.Append .CreateField("编号", dbInteger, 3)
     .Fields.Append .CreateField("姓名", dbText, 8)
     .Fields.Append .CreateField("职称", dbText, 6)
end with
#14
mywisdom882016-11-10 08:54
我电脑上,没access,测试不了你的。
但aa.姓名是空的,而且aa.职称是空的,所以会出现操作符丢失!
你提到,当姓名与职称是空的时候,就会报错。那你就先用姓名不是空的数据来测试1下,看看是不是也报错。
当然,你的设计就有缺陷,你用姓名来关联,那么,姓名就不能有空和重复的。如果你允许姓名重复,那你就要增加编号字段,用编号来关联。
你上表,就有编号字段了,你改为编号字段关联,同时,保证编号字段的内容是唯一的。


[此贴子已经被作者于2016-11-10 08:58编辑过]

#15
guixm19982016-11-10 09:37
你好,我换成Sql = "update aa1 set aa1.职称='副教授' where aa1.姓名='张三'"运行后,是对的。
#16
mywisdom882016-11-10 12:01
那你分2步,
1,是职称空,姓名不空,看看,
2、是职称不空,姓名空,
3、是2个都不空
1