方法二:拼接sql
方法三:使用bulk
方法四:使用tvps插入資料
insert
into test(id, name)
values
(newid(),
'1')
;insert
into test(id, name)
values
(newid(),
'2')
;
static
void
insertone()
毫秒", sw.elapsedmilliseconds));
}if(i == getrow)}}
console.
writeline
(string
.format
("插入條記錄,每條的插入時間是毫秒,預估總得插入時間是毫秒,分鐘"
, totalrow, sw.elapsedmilliseconds,
((sw.elapsedmilliseconds / getrow)
* totalrow)
,getminute
((sw.elapsedmilliseconds / getrow * totalrow)
), getrow));
}static
intgetminute
(long l)
插入100w條記錄,預計需要50分鐘時間,每插入一條記錄大概需要3毫秒左右。
insert
into test(id, name)
values
(newid(),
'1')
,(newid(),
'2')
static
void
insertfour()
'),"
, i);}
cmd.connection = conn;
cmd.commandtext = sb.
tostring()
.trimend
(',');
cmd.
executenonquery()
;}} sw.
stop()
; console.
writeline
(string
.format
("插入條記錄,共耗時毫秒"
,totalrow,sw.elapsedmilliseconds));
}}
插入100w條記錄,預計需要10分鐘時間
bulk
insert
[ database_name .
[ schema_name ]
.| schema_name .
][ table_name | view_name ]
from
'data_file'
[with([
[,] batchsize = batch_size ]
--batchsize指令來設定在單個事務中可以插入到表中的記錄的數量 [[
,] check_constraints ]
--指定在大容量匯入操作期間,必須檢查所有對目標表或檢視的約束。若沒有 check_constraints 選項,則所有 check 和 foreign key 約束都將被忽略,並且在此操作之後表的約束將標記為不可信。 [[
,] codepage = ]
--指定該資料檔案中資料的**頁 [[
,] datafiletype =
]--指定 bulk insert 使用指定的資料檔案型別值執行匯入操作。 [[
,] fieldterminator =
'field_terminator'
]--標識分隔內容的符號 [[
,] firstrow = first_row ]
--指定要載入的第一行的行號。預設值是指定資料檔案中的第一行 [[
,] fire_triggers ]
--是否啟動觸發器 [[
,] formatfile =
'format_file_path'][
[,] keepidentity ]
--指定匯入資料檔案中的標識值用於標識列 [[
,] keepnulls ]
--指定在大容量匯入操作期間空列應保留乙個空值,而不插入用於列的任何預設值 [[
,] kilobytes_per_batch = kilobytes_per_batch ][[
,] lastrow = last_row ]
--指定要載入的最後一行的行號 [[
,] maxerrors = max_errors ]
--指定允許在資料**現的最多語法錯誤數,超過該數量後將取消大容量匯入操作。 [[
,]order
( [,.
..n ])]
--指定資料檔案中的資料如何排序 [[
,] rows_per_batch = rows_per_batch ][[
,] rowterminator =
'row_terminator'
]--標識分隔行的符號 [[
,] tablock ]
--指定為大容量匯入操作持續時間獲取乙個表級鎖 [[
,] errorfile =
'file_name'
]--指定用於收集格式有誤且不能轉換為 ole db 行集的行的檔案。
)]
static
void
inserttwo()
if(dt !=
null
&& dt.rows.count !=0)
console.
writeline
(string
.format
("插入條記錄共花費毫秒,分鐘"
, totalrow, sw.elapsedmilliseconds,
getminute
(sw.elapsedmilliseconds)))
;}}static
datatable
gettableschema()
);return dt;
}
插入100w條記錄,預計需要8s多
建立快取表
--create table valued
create
type testtemp as
table
(id int
, name nvarchar(32)
)
static
void
tbalevaluedtodb
(datatable dt)
}catch
(exception ex)
finally
}static
void
tvpsinsert()
", i * j)
; dt.rows.
add(r);}
sw.start()
;tbalevaluedtodb
(dt)
; sw.
stop()
; console.
writeline
(string
.format
("elapsed time is milliseconds"
, sw.elapsedmilliseconds));
} console.
readline()
;}
插入100w條記錄,預計需要11s多 將ACCESS資料批量匯入SQL SERVER
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 if object id sp inputaccesstosql isnotnull dropproc sp...
Android批量插入資料到SQLite資料庫
在開發android應用時,有時需要把一些資料內建到應用中,常用的有以下2種方式 其一直接拷貝製作好的sqlite資料庫檔案,其二是使用系統提供的資料庫,然後把資料批量插入。我更傾向於使用第二種方式 使用系統建立的資料庫,然後批量插入資料。批量插入資料也有很多方法,那麼那種方法更快呢,下面通過乙個d...
Android批量插入資料到SQLite資料庫
android中在sqlite插入資料的時候預設一條語句就是乙個事務,因此如果存在上萬條資料插入的話,那就需要執行上萬次插入操作,操作速度可想而知。因此在android中插入資料時,使用批量插入的方式可以大大提高插入速度。有時需要把一些資料內建到應用中,常用的有以下2種方式 其一直接拷貝製作好的sq...