--设置恢复模型为simple
alter database 数据库名 set recovery simple
go--插入数据
既然你的id是identity列,那么你可以利用计算列来实现,比如:
create table 表
(
  id int identity,
  itemID varchar(20),
  number int,
  计算列 as 'A000000000'+stuff(convert(varchar,1000000000+id),1,1,'')
)数据导入完成后,用计算列的值更新itemID列,然后删除计算列,设置itemID为primary key--设置恢复模型为full
alter database 数据库名 set recovery full
go

解决方案 »

  1.   

    insert into 表1(itemid,number) (select DISTINCT itemid number from 原表)
      

  2.   

    先全部导入临时表,然后再通过语句
    insert into 表(itemID,number) select distinct itemID,number from 临时表
    插入目的表
      

  3.   

    批量导入(例如使用bcp)到临时表然后从临时表中判断插入正式表,例如:
    insert tb(itemid,number) select distinct * from # a
    where not exists( select * from tb where itemid=a.itemid)
      

  4.   

    有一种方法很简便,速度也快,而且只要是重复的,就忽略不计,其他同一批的不重复的
    可以插入:
    表A三个字段:自增id,itemID,number。
    选中表单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是itemID,
    建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,
    其他不要选择!
    你直接插入 insert into 表  values ('xx','xx','xx')
    遇到重复的,系统会如下提示,但是不重复的资料已经插入
    /*****************
    此时SQL Server会返回如下提示:
      服务器: 消息 3604,级别 16,状态 1,行 1
      已忽略重复的键。
      它表明在表A中不会有重复的行(itemid相等)出现。
    *****************/不知道前面的方法速度如何,这个很快,我插入3000笔,重复的有1500左右,5秒
    钟左右即可!这个方法用来删除重复的纪录比较好,其实用来插入有个msg返回
    速度算是优,不过有点不足
      

  5.   

    测试了一下,简单说一下测试结果:
    从一个16M的文件导入号码,号码量大概为130万(无重复)。先从文本导入tempNumber,再导入tempNumber2,最后tempNumber2中相同itemID的号码不能重复。
    tempNumber(number)
    tempNumber2(id,itemID,number)带有默认的聚集索引。我前面可能没说清楚,在文本中是没有itemID的,这是需要程序来生成的。如果使用 MorningTea(一勺抹茶)的方法,为临时号码表建立唯一索引,从文本到tempNumber用时3分钟。如果去掉唯一索引,用时18秒。insert into tempNumber2 (itemID,number) select distinct 2,number from tempNumber where not exists(select * from tempNumber2 where itemID=2 and number=tempNumber.number)
    耗时38秒insert into tempNumber2 (itemID,number) select distinct 2,number from tempNumber where number not in (select number from tempNumber2 where itemID=2)
    耗时28秒,去掉tempNumber2的索引,耗时13秒。如果在将日志改为简单模式,并去掉tempNumber2的索引,则以上两个语句都大概耗时13秒无论如何,我对这个问题有了新的认识,可以满足应用的要求了。谢谢各位!