我想知道如何同时进行批量插入和批量复制?我有两个表,它们应该受到批量拷贝的影响,因为它们都相互依赖。
因此,我希望,如果插入表1时记录死亡,它将被回滚,而表2永远不会被更新。另外,如果表1插入得很好,而表2的更新失败,表1将被回滚。
这能用批量复制来完成吗?
编辑
我应该说我正在通过C#进行批量插入。
它看起来有点像这样,但这是我一直在研究的一个例子。因此,我不确定是否必须将其修改为存储过程(不确定它的外观和C#代码的外观)。
private static void BatchBulkCopy()
{
// Get the DataTable
DataTable dtInsertRows = GetDataTable();
using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
{
sbc.DestinationTableName = "TBL_TEST_TEST";
// Number of records to be processed in one go
sbc.BatchSize = 500000;
// Map the Source Column from DataTabel to the Destination Columns in SQL Server 2005 Person Table
// sbc.ColumnMappings.Add("ID", "ID");
sbc.ColumnMappings.Add("NAME", "NAME");
// Number of records after which client has to be notified about its status
sbc.NotifyAfter = dtInsertRows.Rows.Count;
// Event that gets fired when NotifyAfter number of records are processed.
sbc.SqlRowsCopied += new SqlRowsCopiedEventHandler(sbc_SqlRowsCopied);
// Finally write to server
sbc.WriteToServer(dtInsertRows);
sbc.Close();
}
}发布于 2010-05-21 04:59:15
我想知道如何同时进行大量插入和批量复制?我有两个表,它们应该受到批量拷贝的影响,因为它们都相互依赖。因此,我希望,如果插入表1时记录死亡,它将被回滚,而表2永远不会被更新。另外,如果表1插入得很好,而表2的更新失败,表1将被回滚。这能用批量复制来完成吗?
不- SqlBulkCopy的全部目的是尽可能快地将数据输入数据库。它只会将数据转储到一个表中。
通常的用例是,一旦导入了该表,就会检查它,并开始“拆分”该数据,并将其存储到它所需要的任何位置--通常是通过存储过程(因为数据已经在服务器上,并且您希望将其分发给其他表)--您不希望将所有这些数据拉回客户端,检查数据,然后再发送回服务器一次)。
SqlBulkCopy只抓取一堆数据并将其放到一个表中--非常快。不能根据条件或条件将数据分割成多个表。
发布于 2010-05-20 23:32:28
您可以在用户定义的事务中运行批量插入,因此执行如下操作:
BEGIN TRANSACTION MyDataLoad
BEGIN TRY
BULK INSERT ...
BULK INSERT ...
COMMIT TRANSACTJION MyDataLoad
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH然而,也许还有其他方法来完成你想要的。在大容量插入表之前,这些表是否为空?当您说表相互依赖时,是否意味着存在要强制执行的外键约束?
https://stackoverflow.com/questions/2878502
复制相似问题