怎样可以把从一个表某个字段的数据向另一个表某个字段插入不重复的数据?
怎样可以把从一个表某个字段的数据向另一个表某个字段插入不重复的数据? 问题点数:10、回复次数:13Top
1 楼qxq321()回复于 2005-08-03 20:53:53 得分 0
有没有数据?
举例子是最好的。
Top
2 楼lgcandywen(1232131)回复于 2005-08-03 20:55:50 得分 0
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable(what the AUTID not in b)Top
3 楼qxq321()回复于 2005-08-03 21:02:48 得分 0
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable(what the AUTID not in b)
这是写的什么啊?Top
4 楼qxq321()回复于 2005-08-03 21:06:29 得分 0
楼主能不能举一个具体的例子?Top
5 楼MorningTea(一勺抹茶)回复于 2005-08-03 21:09:24 得分 10
假设原来的表为mytable,autid有重复,需要保留一笔即可
建立一张具有和mytable相同结构的临时表mytemptable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表Products_temp中不会有重复的行出现。
然后将原表mytable清空,并将临时表mytemptable中数据导入,最后删除临时表mytemptable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的autid,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!
Top
6 楼lgcandywen(1232131)回复于 2005-08-03 21:43:16 得分 0
插入错误: 列名或所提供值的数目与表定义不匹配。Top
7 楼tangqijun199(撒旦.冲上了5角还差一个猩猩,继续努力……)回复于 2005-08-03 21:49:51 得分 0
insert into b(col1,col2,col3)
select col1,col2,col3 from mytable where col1+col2+col3 not in (select col1+col2+col3 from b) group by col1,col2,col3Top
8 楼lgcandywen(1232131)回复于 2005-08-03 21:50:04 得分 0
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
是有这个提示,不过没有重复的都插不入Top
9 楼lgcandywen(1232131)回复于 2005-08-03 21:55:57 得分 0
服务器: 消息 2627,级别 14,状态 1,行 3
违反了 PRIMARY KEY 约束 'PK_SaveQty'。不能在对象 'SaveQty' 中插入重复键。
语句已终止。Top
10 楼MorningTea(一勺抹茶)回复于 2005-08-03 21:57:13 得分 0
是什么时候插入错误,是从mytable插入到mytemptable,还是后来从mytemptable插入到mytable
你建立的临时表mytemptable要和mytable的字段个数一样,位置一样,总之要相同的表!看我的测试例子:
建立原来的表a:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[a]
GO
CREATE TABLE [dbo].[a] (
[a_nam] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[a_add] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
) ON [PRIMARY]
GO
插入数据为:
/*
a_nam a_add
---------- ----------
1 aa
3 bb
2 bb
1 aa
3 bb
(5 row(s) affected)
*/
然后建立一个和a相同结构的表:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test_a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[test_a]
GO
CREATE TABLE [dbo].[test_a] (
[a_nam] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[a_add] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL
) ON [PRIMARY]
GO
--这个是我生成的脚本,我上面说的“列就是autid,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!” 要用企业管理器自己设计!
做好后:执行
insert into test_a
select * from a
/*
Server: Msg 3604, Level 16, State 1, Line 1
Duplicate key was ignored.
--意思就是已忽略重复的键。
*/
然后,看到test_a的数据为:
/*
a_nam a_add
---------- ----------
1 aa---重复的已经没有
2 bb
3 bb
(3 row(s) affected)
*/
然后删除a表的数据:delete from a
然后把test_a的数据导回来:insert into a select * from test_a即可!
注意:建立的表要一抹一样的结构,当然名字要不一样,呵呵
Top
11 楼MorningTea(一勺抹茶)回复于 2005-08-03 21:59:28 得分 0
刚刚看到,我知道了,你的临时表的索引,要建议唯一索引,勾选上忽略重复的值,其他不要选上,
其他不要选上---这个你肯定没有做好,否则怎么会呢?Top
12 楼lgcandywen(1232131)回复于 2005-08-03 21:59:50 得分 0
现在可以了,,一时可以一时不可以,不稳定Top
13 楼lgcandywen(1232131)回复于 2005-08-03 22:02:30 得分 0
楼上上的妹妹好强哦Top




