--设置恢复模型为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
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
insert into 表(itemID,number) select distinct itemID,number from 临时表
插入目的表
insert tb(itemid,number) select distinct * from # a
where not exists( select * from tb where itemid=a.itemid)
可以插入:
表A三个字段:自增id,itemID,number。
选中表单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是itemID,
建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,
其他不要选择!
你直接插入 insert into 表 values ('xx','xx','xx')
遇到重复的,系统会如下提示,但是不重复的资料已经插入
/*****************
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在表A中不会有重复的行(itemid相等)出现。
*****************/不知道前面的方法速度如何,这个很快,我插入3000笔,重复的有1500左右,5秒
钟左右即可!这个方法用来删除重复的纪录比较好,其实用来插入有个msg返回
速度算是优,不过有点不足
从一个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秒无论如何,我对这个问题有了新的认识,可以满足应用的要求了。谢谢各位!