批量入库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_INSERT step 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 conn = 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(); } } } } }