求助关于替换的一SQL语句

来源:百度知道 编辑:UC知道 时间:2024/06/14 07:05:02
小弟欲实现字段值在表间替换,现有dv_bbs1和table2两个表,dv_bbs1表中包含(用到)下列两列内容:

AnnounceID body
1 你好
2 请帮忙看看
3 这个SQL语句怎么写
4 谢谢
5 非常感谢
6 帮个忙
7 水利家园
8 excelhome
9 SQL导入
10 成功

table2中包含有下列两列内容:

AnnounceID body
2 好啊
3 非常好
4 就着
6 弄好了没有
8 陈工
9 就这样

现欲将table2中的body列的内容,在AnnounceID相等时替换dv_bbs1中的body列内容。同时不影响dv_bbs1中不需替换的行的内容,以及表中其它列的内容。
godnosaveme
提供的语句我原来也一直在用的,但这个语句只有在table2中的announceid行数与dv_bbs1的行数相同时才能使用。

现提示错误为:
服务器: 消息 279,级别 16,状态 3,行 1
在这一子查询或聚合表达式中,text、ntext 和 image 数据类型无效。

注意:我的table2表中的行数没有dv_bbs1中的多,table2中只包含要替换的行。
数据库类型为 mssql2000,其中announceid为主键烈。难道是其它问题造成的,比如:数据库结构或字段参数。

谢谢godnosaveme ,但第2句连语法也过不了啊。

试试这个:
update dv_bbs1
set body = b.body
from dv_bbs1
inner join table2 b on dv_bbs1.announceid = b.announceid

那你把下面个语句的update改为updatetext就行了
update dv_bbs1 set body=(select top 1 body from table2 where announceid=dv_bbs1.announceid)
where announceid in (select announceid from dv_bbs1)

where 后面的条件可以解决上面的问题,加了个top 1 是为了防止结果集多于一条记录,等号后面的只能有一条

如果是像你说的那样,字数很多的话SQL可能做不了,建议你在程序中实现。

update dv_bbs1 set body=(select body from table2 where table2.announceid=dv_bbs1.announceid)

我明白你的意思,你是什么数据库,这个语句在 oracle 里一点问题都没有的,呵呵

update dv_bbs1 set body=(select body from table2 where _bbs1.announceid=table2.announceiddv(+))
或者你用这个左连接尝试一下

也许是数据库差异吧,不同的数据库对于sql语句的要求有微小差异

select announceid body from dv_bbs1 where announceid not in (select announceid from table2) join select annoumceid body from table2 order by announceid
给你个思路,这只是搜索,,如果要生成新表,最后into到一个新表就可以了,没有必要和NTEXT类型的替换问题较真
没能在查询分析器上调试,你自