我有一个数据库里有个表 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      标题
我直接删除的是时候总是出现“键列信息不足或不正确。更新影响过多的行。”,按网站上的也好像提示有语法错误,我新手啊,各位高手帮帮忙啊!谢谢!!!

解决方案 »

  1.   

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

  2.   

    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(*)
    )
      

  3.   

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

  4.   

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

  5.   

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

  6.   

    标识列是由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)