免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4304 | 回复: 11
打印 上一主题 下一主题

[求助]求一替换相关SQL语句 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-06 10:05 |只看该作者 |倒序浏览
小弟欲实现字段值在表间替换,现有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中不需替换的行的内容,以及表中其它列的内容。

论坛徽章:
0
2 [报告]
发表于 2008-07-06 12:20 |只看该作者
查了一些资料发现。
我的body列的数据类型为ntext
update不能处理ntext类型的数据,只能使用UPDATETEXT,
WRITETEXT等等

论坛徽章:
0
3 [报告]
发表于 2008-07-06 13:14 |只看该作者
--声明一个游标
  Declare curtable2 Cursor
    for
  Select AnnounceID From table2     

  Declare @AnnounceID int
  Declare @body  varchar(30)

--初始化
  Set @AnnounceID=0
  Set @body=\'\'

  --打开游标
  Open curtable2

  --循环并提取记录
  Fetch Next From curtable2 Into @AnnounceID   
  While ( @@Fetch_Status=0 )   
  begin
--更新到汇总表。

        set @body=(select table2.body from table2 where table2.AnnounceID=@AnnounceID )

    if (@body is not null and @AnnounceID in (select dv_bbs1.AnnounceID from dv_bbs1))
   begin
        Update dv_bbs1 Set dv_bbs1.body=(@body) where dv_bbs1.AnnounceID=@AnnounceID
        print @AnnounceID
   end
Fetch Next From curtable2 Into @AnnounceID   
      

end

  --关闭游标   
  Close curtable2

  --释放游标
  Deallocate curtable2

论坛徽章:
0
4 [报告]
发表于 2008-07-06 13:33 |只看该作者
谢谢楼上的,运行以后提示以下错误:


服务器: 消息 279,级别 16,状态 3,行 22
在这一子查询或聚合表达式中,text、ntext 和 image 数据类型无效。
服务器: 消息 257,级别 16,状态 1,行 22
不允许从数据类型 ntext 到 varchar 的隐性转换。请使用 CONVERT 函数来运行此查询。



是不是不能试用update函数啊,另:body中可能包含有上千的中文字符,使用的数据库为mssql2000

[ 本帖最后由 ynlagie 于 2008-7-6 13:38 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-07-06 13:38 |只看该作者

回复 #4 ynlagie 的帖子

应该是这个问题吧

你再想想怎么处理 ntext的问题

我写的是假设body是vchar类型的情况

论坛徽章:
0
6 [报告]
发表于 2008-07-06 13:41 |只看该作者
谢谢,cddcdd 。

小弟初学,不会写sql语句。能不能帮帮忙,弄成适合 ntext数据类型的情况。

拜托了。

论坛徽章:
0
7 [报告]
发表于 2008-07-06 13:52 |只看该作者

回复 #6 ynlagie 的帖子

555555555
实在不会了

那个东西麻烦的要死,还是等待高人吧

论坛徽章:
0
8 [报告]
发表于 2008-07-06 14:24 |只看该作者
教你个方法
在MSSQL中你只要能够查询出来你要的数据后把select改成update就可以了
比如你要的数据是:
select dv_bbs1.id,dv_bbs1.body,b.body
from dv_bbs1  
inner join table2 b on dv_bbs1.id = b.id

那你update的时候只要把select a.id,a.body,b.body替换成update

update dv_bbs1
set body = b.body

from dv_bbs1  
inner join table2 b on dv_bbs1.id = b.id

论坛徽章:
0
9 [报告]
发表于 2008-07-06 16:02 |只看该作者
原帖由 jvkojvko 于 2008-7-6 14:24 发表
教你个方法
在MSSQL中你只要能够查询出来你要的数据后把select改成update就可以了
比如你要的数据是:
select dv_bbs1.id,dv_bbs1.body,b.body
from dv_bbs1  
inner join table2 b on dv_bbs1.id = b.id

那你update的时候只要把select a.id,a.body,b.body替换成update

update dv_bbs1
set body = b.body

from dv_bbs1  
inner join table2 b on dv_bbs1.id = b.id


谢谢jvkojvko提供的方法,我用
update dv_bbs1
set body = b.body

from dv_bbs1  
inner join table2 b on dv_bbs1.announceid = b.announceid

替换成功!

不知道vkojvko你所说的意思是不是这个,我弄对了没有。

另:不知当单个字段内容有几千汉字的时候内容会不会丢失啊?能不能给个提示。

[ 本帖最后由 ynlagie 于 2008-7-6 16:08 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-07-07 08:29 |只看该作者
是的,

几千汉字能存的下吗?text类型?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP