新手求教:表中有相同项,删除时出现“键列信息不足或不正确。更新影响过多的行。”
我有一个数据库里有个表 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




