首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于SQl BulkCopy的问题

关于SQl BulkCopy的问题
EN

Stack Overflow用户
提问于 2010-05-20 23:05:27
回答 2查看 713关注 0票数 0

我想知道如何同时进行批量插入和批量复制?我有两个表,它们应该受到批量拷贝的影响,因为它们都相互依赖。

因此,我希望,如果插入表1时记录死亡,它将被回滚,而表2永远不会被更新。另外,如果表1插入得很好,而表2的更新失败,表1将被回滚。

这能用批量复制来完成吗?

编辑

我应该说我正在通过C#进行批量插入。

它看起来有点像这样,但这是我一直在研究的一个例子。因此,我不确定是否必须将其修改为存储过程(不确定它的外观和C#代码的外观)。

代码语言:javascript
复制
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();
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-21 04:59:15

我想知道如何同时进行大量插入和批量复制?我有两个表,它们应该受到批量拷贝的影响,因为它们都相互依赖。因此,我希望,如果插入表1时记录死亡,它将被回滚,而表2永远不会被更新。另外,如果表1插入得很好,而表2的更新失败,表1将被回滚。这能用批量复制来完成吗?

不- SqlBulkCopy的全部目的是尽可能快地将数据输入数据库。它只会将数据转储到一个表中。

通常的用例是,一旦导入了该表,就会检查它,并开始“拆分”该数据,并将其存储到它所需要的任何位置--通常是通过存储过程(因为数据已经在服务器上,并且您希望将其分发给其他表)--您不希望将所有这些数据拉回客户端,检查数据,然后再发送回服务器一次)。

SqlBulkCopy只抓取一堆数据并将其放到一个表中--非常快。不能根据条件或条件将数据分割成多个表。

票数 0
EN

Stack Overflow用户

发布于 2010-05-20 23:32:28

您可以在用户定义的事务中运行批量插入,因此执行如下操作:

代码语言:javascript
复制
BEGIN TRANSACTION MyDataLoad
BEGIN TRY

BULK INSERT ...

BULK INSERT ...

COMMIT TRANSACTJION MyDataLoad
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
END CATCH

然而,也许还有其他方法来完成你想要的。在大容量插入表之前,这些表是否为空?当您说表相互依赖时,是否意味着存在要强制执行的外键约束?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2878502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档