測試表結構如下:
create table [dbo].[tblphonenum](
[id] [bigint] identity(1,1) not null,
[phonenum] [nvarchar](50) not null,
[name] [nvarchar](50) not null,
[source] [nvarchar](50) null,
[createdate] [datetime] not null,
[createuser] [nvarchar](50) not null,
[updatedate] [datetime] not null,
[updateuser] [nvarchar](50) not null
) on [primary]
go方案一
每1000條資料執行一次insert 操作。執行效率,工作電腦環境測試,一秒鐘一千條。
print 'begin time' + cast(getdate() as nvarchar)
declare @i as bigint
set @i = 1
declare @t as int
set @t = 1
declare @strinsert as nvarchar(max)
declare @sql as nvarchar(max)
set @strinsert =
'insert into
tblphonenum
(phonenum
,name
,source
,createdate
,createuser
,updatedate
,updateuser
)values'
while(@i<=15077000)
--while(@i<=100)
begin
while (@t <=1000)
begin
if @t = 1
begin
set @sql =
'(right(replicate(''0'',11) + cast(' + cast(@i as nvarchar) + ' as varchar),11)
,''username'' + right(replicate(''0'',11) + cast(' + cast(@i as nvarchar) + ' as varchar),11)
,''test source''
,getdate()
,''admin''
,getdate()
,''admin''
)'end
else
begin
set @sql = @sql +
',(right(replicate(''0'',11) + cast(' + cast(@i as nvarchar) + ' as varchar),11)
,''username'' + right(replicate(''0'',11) + cast(' + cast(@i as nvarchar) + ' as varchar),11)
,''test source''
,getdate()
,''admin''
,getdate()
,''admin''
)'end
if @t = 1000
begin
set @sql = @strinsert + @sql
exec sp_executesql @sql
set @sql = ''
set @t = 1
endelse
begin
set @t = @t + 1
endset @i = @i+1
endend
print 'end time' + cast(getdate() as nvarchar)
go方案2:使用表變數,先把資料儲存到表變數中,然後再insert select語句插入。
效率提高顯著,沒十萬條資料執行一次插入操作,平均7秒,插入10萬條。
create type dt as table
(phonenum varchar(100)
,name varchar(100)
,source varchar(100)
,createdate datetime
,createuser varchar(100)
,updatedate datetime
,updateuser varchar(100)
); go
select * from systypes
print 'begin time' + cast(getdate() as nvarchar)
declare @dt as dt
declare @i as bigint
set @i = 1
while (@i<=100000)
begin
insert into @dt values
(right(replicate('0',10) + cast(@i as nvarchar),11),
'username' +right(replicate('0',10) + cast(@i as nvarchar),11),
'test source',
getdate(),
'admin',
getdate(),
'admin'
)set @i = @i + 1
endinsert into tblphonenum
select * from @dt
print 'end time' + cast(getdate() as nvarchar)
SQL Server批量插入資料
有這樣乙個表 operatorinfo 欄位有 operator no operator pwd operator name group id group no skill level operator type pausenum operator acd type 其中 operator no 需...
使用SqlServer資料批量插入
一 sqlserver資料批量插入 sqlserver的批量插入很簡單,使用sqlbulkcopy就可以,以下是該類的實現 為 system.data.sqlclient 提供的用於批量操作的方法。public sealed class mssqlbatcher ibatcherprovider 將...
SQL SERVER 批量資料插入方法
在sql server 中插入一條資料使用insert語句,但是如果想要批量插入一堆資料的話,迴圈使用insert不僅效率低,而且會導致sql一系統效能問題。下面介紹sql server支援的兩種批量資料插入方法 bulk和錶值引數 table valued parameters 執行下面的指令碼,...