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

怎样可以把从一个表某个字段的数据向另一个表某个字段插入不重复的数据?

楼主lgcandywen(1232131)2005-08-03 20:50:56 在 MS-SQL Server / 基础类 提问

怎样可以把从一个表某个字段的数据向另一个表某个字段插入不重复的数据? 问题点数: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

相关问题

  • 查询表中重复字段值。
  • 所有字段共同做主键时候,怎么保证插入时所有字段都重复的记录不被插入?
  • 救命?如何将大文本插入sqlserver7的表字段中?
  • 如何在ACCESS表格中插入字段。
  • 如何动态插入一个数据表的字段?
  • 在SQL Server 的表中插入‘字段’问题
  • 求问,向存在的表中插入字段。
  • 如何提取一个表中重复字段的行?????
  • 如何不让表中非主键字段内容不重复
  • 如何用select语句 将表中的重复字段查出

关键词

  • 字段
  • 数据
  • 服务器
  • 选择
  • 结构
  • 表
  • 重复
  • col
  • autid
  • mytemptable

得分解答快速导航

  • 帖主:lgcandywen
  • MorningTea

相关链接

  • SQL Server类图书

广告也精彩

反馈

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