CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

新手求教:表中有相同项,删除时出现“键列信息不足或不正确。更新影响过多的行。”

楼主tnter()2006-11-04 18:12:06 在 MS-SQL Server / 基础类 提问

我有一个数据库里有个表   tj_fp  
          rq               bh       cdh       gh       pjh       fpje       rpttitle  
  2006-1-1             1         4           4       605         10           标题  
  2006-1-1             1         4           4       605         10           标题  
  2006-1-1             1         4           4       605         10           标题  
  2006-1-2             2         3           1       767         5             标题  
  2006-1-3             1         2           2       747         1             标题  
   
  如何删除多余的两行2006-1-1             1         4           4       605         10           标题,使表变为  
   
          rq               bh       cdh       gh       pjh       fpje       rpttitle  
  2006-1-1             1         4           4       605         10           标题  
  2006-1-2             2         3           1       767         5             标题  
  2006-1-3             1         2           2       747         1             标题  
  我直接删除的是时候总是出现“键列信息不足或不正确。更新影响过多的行。”,按网站上的也好像提示有语法错误,我新手啊,各位高手帮帮忙啊!谢谢!!!  
   
  问题点数:20、回复次数:12Top

1 楼hellowork(一两清风)回复于 2006-11-04 18:15:01 得分 0

为表增加一个主键或IDENTITY自动增量标识列,并为标识列创建UNIQUE约束,以保证标识值唯一.Top

2 楼tnter()回复于 2006-11-04 18:20:34 得分 0

请问增加的具体的步骤啊,我真的不太懂啊,几乎还没入门,谢谢,拜托了!!!Top

3 楼marco08(天道酬勤)回复于 2006-11-04 18:22:46 得分 0

最好为表建立一个identity列Top

4 楼marco08(天道酬勤)回复于 2006-11-04 18:27:46 得分 0

ID         rq               bh       cdh       gh       pjh       fpje       rpttitle  
  1       2006-1-1             1         4           4       605         10           标题  
  2       2006-1-1             1         4           4       605         10           标题  
  3       2006-1-1             1         4           4       605         10           标题  
  4       2006-1-2             2         3           1       767         5             标题  
  5       2006-1-3             1         2           2       747         1             标题  
   
   
  delete   tj_fp   where   ID   not   in  
  (  
  select   max(ID)   from   tj_fp  
  group   by   rq,bh,cdh,gh,pjh,fpje,rpttitle  
  having   count(*)  
  )  
  Top

5 楼marco08(天道酬勤)回复于 2006-11-04 18:28:58 得分 8

--错了,   应该是这下  
  delete   tj_fp   where   ID   not   in  
  (  
  select   max(ID)   from   tj_fp  
  group   by   rq,bh,cdh,gh,pjh,fpje,rpttitle  
  )Top

6 楼tnter()回复于 2006-11-04 18:32:22 得分 0

请问ID   代表什么啊,谢谢Top

7 楼yjlhch(爱拼才会赢)回复于 2006-11-04 18:40:35 得分 2

id代表自增加主键,你该多看看帮助了Top

8 楼tnter()回复于 2006-11-04 18:40:56 得分 0

我用了该语句后提示列名<ID>无效Top

9 楼tnter()回复于 2006-11-04 18:46:03 得分 0

各位老大,可怜一下吧,本人没学过sql2000啊,单位直接买的别人做好的数据库用,突然出现这个问题,我完全无法解决,可是又急等着用,帮帮忙,谢谢!!!!Top

10 楼hellowork(一两清风)回复于 2006-11-04 20:03:07 得分 10

标识列是由SQLSERVER系统自动维护的列,其值是自动生成的,每增加一行该值就自动递增,相当于行号.  
  1.增加标识列.  
  a.使用企业管理器增加标识列  
  在SQLSERVER企业管理器中右键点击该表,从右键菜单中选择"设计表",在表设计窗口中第一行处点击右键,从右键菜单中选择"插入列",然后输入列名为ID,数据类型为int,然后点击窗口下方该新列属性窗口中的"标识",从组合框中选择"是".然后保存.  
  b.使用SQL语句增加标识列  
  在查询分析器中执行以下代码:  
  alter   table   数据库名.所有者.表名称   add   ID   int   identity(1,1)     /*ID从1开始递增,每次增1*/  
  例如:假设数据库名为mydb,所有者为dbo,表名称为tj_fp  
  alter   table   mydb.dbo.tj_fp   add   ID   int   identity(1,1)  
   
   
  2.删除重复行  
  a.只保留ID最小的行  
  delete   tj_fp   from   tj_fp   as   a    
  where   not   exists(select   1   from   tj_fp   where    
  rq   =   a.rq   and  
  bh   =   a.bh   and  
  cdh   =   a.cdh   and  
  gh   =   a.gh   and  
  pjh   =   a.pjh   and  
  fpje   =   a.fpje   and  
  rpttitle   =   a.rpttile   and  
  id   <   a.id)  
  b.只保留ID最大的行  
  delete   tj_fp   from   tj_fp   as   a    
  where   not   exists(select   1   from   tj_fp   where    
  rq   =   a.rq   and  
  bh   =   a.bh   and  
  cdh   =   a.cdh   and  
  gh   =   a.gh   and  
  pjh   =   a.pjh   and  
  fpje   =   a.fpje   and  
  rpttitle   =   a.rpttile   and  
  id   >   a.id)Top

11 楼tnter()回复于 2006-11-04 20:26:10 得分 0

谢谢,写的真详细啊,真的谢谢!!!!Top

12 楼anison(影舞者)回复于 2006-12-29 13:34:05 得分 0

markTop

相关问题

关键词

得分解答快速导航

  • 帖主:tnter
  • marco08
  • yjlhch
  • hellowork

相关链接

  • SQL Server类图书

广告也精彩

反馈

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