日期:2014-05-18  浏览次数:20446 次

SQL Server批量插入数据(1000万为例) 进者加分
不重复数据,怎么样才能提高插入的效率,用更短的时间
例:一公司一百万位会员的会员卡号(格式:SN+八位数字)

------解决方案--------------------
卡号放在哪?
------解决方案--------------------
我是说插入到数据库以前卡号放在哪?
纸上?excel?txt?
------解决方案--------------------
卡号自动加1吗?

参考如下:

/*Id, FormatId, F1 ,F2
Id序号我设了自动加一,FormatId我想他也象这样 "SL000001 ",
当Insert时就加1,FormatId我想他也能自动加一 "SL000001 ", "SL000002 "...
能用一条sql什么办法实现.最好不要用中间表。有什么好方法?
谢谢!
*/

create table #test
(id int identity,
FormatId as 'SL '+right(10000000+id,6),
F1 varchar(50))
go
insert #test(F1) select '1 '
union all select '2 '


select * from #test

drop table #test

/*
id FormatId F1
----------- -------------- -----
1 SL000001 1
2 SL000002 2

(所影响的行数为 2 行)
*/
------解决方案--------------------
我也想知道,不知道你的数据从哪里来?
导入的话用insert tb1 select ...
------解决方案--------------------
关键是你的数据源是什么?然后才好确定采用哪种方式追加到数据库中。
------解决方案--------------------
写到一个txt
然后用bulk insert
------解决方案--------------------
路过了,帮顶了。
学习了,成长了。
接分了,生星了。

------解决方案--------------------
路过了,帮顶了。
学习了,成长了。
接分了,生星了。
^_^
------解决方案--------------------
路过了,帮顶了。
学习了,成长了。
接分了,生星了。
----------
感觉有些沧桑。
------解决方案--------------------
up
------解决方案--------------------
up
------解决方案--------------------
不知道楼主的数据源是啥格式

通常企业喜欢用Excel,不过一千万的数据用Excel来处理那有多少个文件啊(一个Excel支持六万多行,超过的要修改本地注册表才行)

如果是Excel把文件名存放到一个表里,一行一个表名,然后用Job激活某存储过程(该存储过程负责一行一行的数据导入到SQL数据表,用OpenRowSet操作),反正是Job激活的,丢到一边去执行几个小时,回来再看就是。

当然这是Excle,不知道这个方法楼主满意不,B/S C/S 使用都方便。
------解决方案--------------------
DTS是最快的
------解决方案--------------------
頂..
------解决方案--------------------
帮顶一下
我只做过 3000 条
------解决方案--------------------
先做成文本文件:例如.txt格式
然后用SQL Server中的bcp实用工具导入数据库
如果是100万左右的数据是挺快的!
试试看!
------解决方案--------------------

insert into table
select * from otherthable

先把数据组织好,一次性插进去挺快的
------解决方案--------------------
批量插入:
declare @i int
declare @j int
declare @m int
declare @strsql(8000)
set @i=1

while(@j <=10000) --一万次 每次100条
set @m=1
begin
set @strsql= "insert into table(code) select 'sn ' " + right( "00000000 " + convert(varchar(8),@i),8)
while(@m <=100)
begin
set @i=@i+1
set @strsql= @strsql + " union select 'sn ' " + right( "00000000 " + convert(varchar(8),@i),8)