c 批量插入資料到sqlserver

2021-10-19 18:05:09 字數 3982 閱讀 1349

方法二:拼接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...