sql server 批量插入資料demo

2021-09-25 07:01:59 字數 2919 閱讀 2696

測試表結構如下:

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 執行下面的指令碼,...