现在我要读取n个二进制文件,然后循环插入到数据库中,文件的数据大约有100w条,每条记录有50个字段,插入的同时,还要避免插入重复项,我的方法是
循环读取
{
先检查后插入数据库,写成存储过程
}
数据量少还可以,但数据量多的时候,运行很慢,我觉得这样试用存储过程,和直接使用sql没什么优势可言我想到另一个办法,就是设置主键,避免插入重复
循环读取
{
try
插入数据库,写成存储过程
catch
捕获sql主键重复异常,跳出
}
这样虽然不用判断,但如果重复,每次都要捕获异常,效率好像也差不多大家有没什么更好的办法,避免插入重复,而且效率高的,还有,关于这里的存储过程,我想能不能一次性构造一条语句,像
insert 表 seletc 字段1,字段2....union selec 字段1,字段2......
不知道这样可否,不然在循环中反复创建con对象,使用完后再释放,消耗不少资源
大家帮帮忙,讨论下,谢谢了
循环读取
{
先检查后插入数据库,写成存储过程
}
数据量少还可以,但数据量多的时候,运行很慢,我觉得这样试用存储过程,和直接使用sql没什么优势可言我想到另一个办法,就是设置主键,避免插入重复
循环读取
{
try
插入数据库,写成存储过程
catch
捕获sql主键重复异常,跳出
}
这样虽然不用判断,但如果重复,每次都要捕获异常,效率好像也差不多大家有没什么更好的办法,避免插入重复,而且效率高的,还有,关于这里的存储过程,我想能不能一次性构造一条语句,像
insert 表 seletc 字段1,字段2....union selec 字段1,字段2......
不知道这样可否,不然在循环中反复创建con对象,使用完后再释放,消耗不少资源
大家帮帮忙,讨论下,谢谢了
create table tb2(name varchar(20))
create unique index idx_01 on tb2(name)with(ignore_dup_key=on)
insert into tb2 select 'a'
insert into tb2 select 'b'
insert into tb2 select 'b'
insert into tb2 select 'c'
select * from tb2
/*
---
a
b
c
*/
违反了 PRIMARY KEY 约束 'PK_Datarec'。不能在对象 'Datarec' 中插入重复键。
语句已终止。和设置主键返回的错误是一样的,2627,有没办法发现重复主键自动跳过的呢
这句是05才有的吧,我用的是2000
这样你在导入时,用循环
拼一堆:"insert into ..."
然后,一并提交给sql server去执行。
现在我有个问题,就是如果用insert 表 select。union all select。
这样去提交sql的话,会不会因为这个insert的sql过长,而出现提交错误,比如后面连接了100w个select