CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请问几个关联的数据表,如何高效率的删除其中的部分数据啊?

楼主srz007(呵呵)2006-03-02 08:39:51 在 MS-SQL Server / 基础类 提问

比如有3个表A、B、C  
  xxx代表其它字段  
  A表结构(ID1   字段为自动增长)  
  ID1   Time             xxx  
  1       2001-1-1  
  2       2002-2-2  
  3       2003-3-3  
  ............  
   
  B表结构  
  ID2   ID1   xxx  
  4       1  
  5       1  
  6       2  
  ...........  
   
  C表结构  
  ID3   ID2   xxx  
  7       4  
  8       5  
  9       6  
  ............  
   
  也就是说表A和B是一对多的关系,而B和C是一对一的关系  
  现在我要删除3个表中时间在2002-2-2   之前的数据,该怎么写执行效率高呢?因为我实际应用中的数据量相对较大,表A大概30几万数据,B和C大概是300多万,请帮我想下该如何执行这个操作呢?谢谢!!! 问题点数:100、回复次数:11Top

1 楼lsqkeke(可可)回复于 2006-03-02 08:45:24 得分 5

在A表上建立删除触发器  
  或者写在一个存储过程里边,用事务处理Top

2 楼wgsasd311(自强不息)回复于 2006-03-02 08:49:42 得分 0

DELETE   C   FROM   TA   A,TB   B,TC   C  
  WHERE     A.[TIME]<'2002-2-2'   AND   A.ID1=B.ID1   AND   B.ID2=C.ID2  
   
  DELETE   B   FROM   TA   A,TB   B  
  WHERE     A.[TIME]<'2002-2-2'   AND   A.ID1=B.ID1  
   
  DELETE   TA   WHERE     [TIME]<'2002-2-2'    
  Top

3 楼srz007(呵呵)回复于 2006-03-02 09:06:03 得分 0

先谢谢楼上2位的回答,不过  
  DELETE   C   FROM   TA   A,TB   B,TC   C  
  WHERE     A.[TIME]<'2002-2-2'   AND   A.ID1=B.ID1   AND   B.ID2=C.ID2  
  这种方法的执行效率实在是太低了  
  我昨天按这种方式执行,到现在还没结束呢,已经运行将近24小时了!Top

4 楼srz007(呵呵)回复于 2006-03-02 09:50:56 得分 0

自己顶Top

5 楼ziping(子平)回复于 2006-03-02 11:17:19 得分 0

是不是在数据库里面设置了表关联了?或者触发器这些东西?Top

6 楼mm2love2zz(never stop.)回复于 2006-03-02 14:03:22 得分 0

写一个函数  
   
  运用游标和临时表,循环删除Top

7 楼mm2love2zz(never stop.)回复于 2006-03-02 14:06:36 得分 0

用游标的目的是为了循环  
  临时表保存取出的符合条件的A表的ID1字段内容Top

8 楼srz007(呵呵)回复于 2006-03-02 14:38:47 得分 0

能给出具体的方法么?Top

9 楼srz007(呵呵)回复于 2006-03-02 17:09:26 得分 0

自己   upTop

10 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2006-03-03 10:16:39 得分 10

试试  
  -----------------  
  DELETE   TA   WHERE     [TIME]<'2002-2-2'    
  DELETE   b   from   TB   b   where   not   exists(select   1   from   TA   where   ID1=b.ID1)  
  DELETE   c   from   TC   c   where   not   exists(select   1   from   TA   where   ID2=C.ID2)  
  Top

11 楼wgsasd311(自强不息)回复于 2006-03-03 10:36:26 得分 85

--try  
  select   id1   into   #1   from   ta   WHERE     [TIME]<'2002-2-2'    
  select   id2   into   #2   FROM   #1   A,TB   B   where   a.id1=b.id1  
   
  DELETE   TA   WHERE     [TIME]<'2002-2-2'    
   
  DELETE   B   FROM   #1   a,TB   B  
  WHERE   a.id1=b.id1  
   
  DELETE   B   FROM   #2   a,TC   B  
  WHERE   a.id2=b.id2  
   
  drop   table   #1,#2Top

相关问题

  • 数据表关联问题
  • 数据表变量无法与数据表相关联
  • VB能删除数据表吗?
  • 不用SQL整样删除数据表?
  • (求助)数据表关联问题!
  • 如何用代码删除数据表的一个字段?(keani)
  • 关于删除Sql server 数据表中列的问题
  • 如何编程方式删除数据表中的字段?
  • 如何删除数据表中重复的记录
  • 怎样删除数据表中某列的数据

关键词

  • 数据
  • 结构
  • 删除
  • 表
  • xxx

得分解答快速导航

  • 帖主:srz007
  • lsqkeke
  • mislrb
  • wgsasd311

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo