批量插入自增列資料
阿新 • • 發佈:2018-10-31
批量入庫sql 操作:
DECLARE @id INT SET @id=0; DECLARE @num INT SET @num=0; --set statistics IO off --SET STATISTICS TIME off --SET IDENTITY_INSERT step ON --SET IDENTITY_INSERT step OFF SELECT @id=MAX(id) FROM dbo.step(NOLOCK) PRINT('begin==') WHILE 1=1 BEGIN --PRINT(@id) SET IDENTITY_INSERTView Codestep ON INSERT INTO step([id],[createtime]) SELECT TOP 100 * FROM dbo.step_all(NOLOCK) WHERE id>@id AND id<=11233766 ORDER BY id SET @id=@@IDENTITY PRINT(@id) SET IDENTITY_INSERT step OFF SET @num=@num+1; PRINT(@num); IF(@id>=11233766) BEGIN PRINT(@id) PRINT('end==') BREAK; END END PRINT('======') ----10870243 --10874644 --SELECT MAX(id),MAX(createtime) FROM dbo.step(NOLOCK)
後臺頁面操作(推薦,比較高效,配合索引查詢到記憶體入庫):
public static void NBulkCopy(string connString, string tableName, DataTable dt, int BatchSize) { using (SqlConnection connView Code= new SqlConnection(connString)) { conn.Open(); using (SqlTransaction transaction = conn.BeginTransaction()) { using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, transaction)) { bulkCopy.BatchSize = BatchSize; bulkCopy.BulkCopyTimeout = 60; bulkCopy.DestinationTableName = tableName; try { foreach (DataColumn col in dt.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } bulkCopy.WriteToServer(dt); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw ex; } finally { bulkCopy.Close(); transaction.Dispose(); conn.Dispose(); } } } } }