我想知道如何同时进行批量插入和批量复制?我有2个表应该受批量复制的影响,因为它们彼此依赖。
所以我想要的是,如果在插入表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();
}
}
答案 0 :(得分:0)
您可以在用户定义的事务中运行批量插入,因此请执行以下操作:
BEGIN TRANSACTION MyDataLoad
BEGIN TRY
BULK INSERT ...
BULK INSERT ...
COMMIT TRANSACTJION MyDataLoad
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
但是,可能还有其他方法可以实现您的目标。在批量插入表之前,表是否为空?当你说这些表相互依赖时,你的意思是你想强制执行外键约束吗?
答案 1 :(得分:0)
我想知道如何做一个群众 同时插入和批量复制? 我有2个表应该有影响 通过批量副本,因为他们都依赖 在彼此身上。所以我想要它,如果 插入表1时,记录会死亡 它会回滚,表2永远不会 得到更新。如果表1也插入 好,表2更新失败表 1回滚。可以做到这一点 批量复制?
不 - SqlBulkCopy的重点是尽快将数据导入数据库。它只会将数据转储到一个表中。
正常的用例是在导入后检查该表,并开始“拆分”该数据并将其存储到需要去的任何地方 - 通常是通过存储过程(因为数据已经打开)服务器,并且您希望将其分发给其他表 - 您不希望将所有数据提取回客户端,检查它,然后再将其发送回服务器。)
SqlBulkCopy只抓取一堆数据并将其放入表中 - 非常快。 无法根据条件或条件将数据拆分为多个表格。