问题标签 [sqlbulkcopy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4062 浏览

sql-server - 如何使用 SqlBulkCopy 保持行顺序?

我正在使用 SqlBulkCopy 以编程方式将数据从 Excel 导出到 SQL Server 2005。它很好用,我唯一的问题是它没有保留我在 Excel 文件中的行序列。我没有要排序的列,我只想按照它们在 Excel 电子表格中出现的顺序插入记录。

我无法修改 Excel 文件,必须使用我所拥有的。按任何现有列排序将破坏序列。

请帮忙。

PS 最终将 ID 列插入电子表格,看起来在导出/导入期间无法保持订单

0 投票
3 回答
3010 浏览

c# - 使用 SqlBulkCopy 填充非常大的表的最佳方法是什么?

每晚,我需要从 ODBC 源中填充一个 SQL Server 2005 表,其中包含超过 800 万条记录。目前我正在使用来自链接服务器的插入语句,其语法选择类似于:

这确实效率低下,需要数小时才能运行。我正在使用类似于此问题中的代码的 SqlBulkInsert 代码编写解决方案。

该问题中的代码首先在内存中填充数据表,然后将该数据表传递给 SqlBulkInserts WriteToServer 方法。

如果填充的数据表使用的内存比它正在运行的机器上的可用内存多(在我的情况下是 16GB 内存的服务器),我该怎么办?

我考虑过使用重载的 ODBCDataAdapter填充方法,该方法允许您仅填充从 x 到 n 的记录(其中 x 是起始索引,n 是要填充的记录数)。然而,这可能是一个比我目前拥有的更慢的解决方案,因为这意味着在源上多次重新运行 select 语句。

我该怎么办?只需一次填充整个内容并让操作系统管理内存?我应该分块填充它吗?还有其他我没有想到的解决方案吗?

0 投票
2 回答
14634 浏览

sql-server-2005 - SqlBulkInsert - 如何设置火触发器,检查约束?

我正在使用具有有限权限的数据库用户将 ADO.NET 2.0 SqlBulkCopy 对象从 C# 方法批量插入到 MS SQL 2005 数据库中。当我尝试运行该操作时,我收到错误消息:

批量复制失败。用户对表 'theTable' 没有 ALTER TABLE 权限。'FIRE_TRIGGERS'如果表具有触发器或 检查约束,但未'CHECK_CONSTRAINTS'将批量提示指定为批量复制命令的选项,则需要对批量复制操作的目标表具有 ALTER TABLE 权限。

我阅读了一些文档并使用构造函数创建了大容量复制对象,该构造函数允许我指定此类内容:

但这并没有改变任何东西 - 我收到与以前相同的错误消息。我尝试摆弄其他一些 SqlBulkCopyOptions 值,但没有运气。我真的认为这会解决问题,我错过了什么吗?

在将表上的 ALTER 授予我的用户后,我测试了该过程,并且操作成功。但是,这不是我的情况的选择。

0 投票
7 回答
35768 浏览

c# - SqlBulkCopy 不工作

DataSet从 Excel 表中填充了一个。我想使用 SQLBulk Copy 在PKLead_Hdr所在的表中插入记录。LeadId

执行以下代码时出现以下错误:

给定的 ColumnMapping 与源或目标中的任何列都不匹配

0 投票
3 回答
1160 浏览

sql-server - SQLBulkCopy 是否会显着增加 .mdf 文件的大小?

我正在使用 SqlBulkCopy 类对 SQLServer 数据库进行批量插入。

与 DB 关联的 .mdf 文件的原始大小为 1508 Mb。

当我以 100000 的 BatchSize 运行它(在大约 400 万条记录的相同数据上)时
,.mdf 的大小增长到 1661 MB。
BatchSize 为 1000000,.mdf 的大小增长到 1659 MB。

为什么会有这种变化?这么小的变化可以忽略不计,除了当我的测试器以 100 的批量大小运行它(在相同的数据上)时,.mdf 文件疯狂增长,直到它用完所有可用的 20 个演出,然后它由于可用空间不足,出现错误。

这是因为 SqlBulkCopy 分配了一些固定大小的块吗?
它在 BatchSizes > 100000 时工作正常,但我想了解这种奇怪行为/错误的根本原因。

0 投票
2 回答
982 浏览

excel - SqlBulkCopy 不复制长度大于 255 个字符的字符串

我正在尝试将大型 Excel 电子表格复制到 SQL Server 数据库中。我正在打开一个到 Excel 电子表格的 OldDbConnection 并从 [Sheet1$] 中读取所有内容。然后,我使用 OleDbCommand 来获取带有电子表格数据的 IDataReader。

Excel 工作表中有几个单元格的文本内容超过 256 个字符。但是,一旦使用 SqlBulkCopy 将其上传到数据库表,我只能看到数据库中这些 excel 单元格的前 255 个字符。数据库表字段的长度为 5000 个字符。

SqlBulkCopy 是否限制字段大小?谢谢!

0 投票
1 回答
2573 浏览

sql - 来自 DataTable 的 SQL CLR SqlBulkCopy

我们在 CLR 过程中有一个内存数据表。经过大量处理后,DataTable 有很多数据需要加载到数据库中的表中。不幸的是,由于我们使用的是上下文连接, SqlBulkCopy 将无法工作(抛出错误:在上下文限制的上下文连接大纲中,请求的操作不可用 )。

我们正在考虑建立一个额外的常规连接并使用它来执行 SQLBulkCopy。考虑到在上下文连接上使用常规连接的开销,这似乎相当愚蠢。我们考虑过遍历 DataTable 中的行并为每个行插入一条记录,但它的大小很大,SQLBulkCopy 似乎更合适。

我们没有与 DataTable 结婚,只是在寻找从 CLR 过程将大量数据插入数据库的最佳方法。关于 DataTable 的最后一点说明,它代表底层数据库表,但不通过 DataSet 或 TableAdapter 绑定到表。在 CLR 过程中这样做的方法并不是很明显。这样做并使用 AcceptChanges 或 Update 方法将是一个可接受的解决方案。

0 投票
1 回答
859 浏览

asp.net - 使用 SQLBulkCopy 从 excel 到 SQL Server 时添加文本

我创建了一个页面,我们的合作伙伴可以使用 SQLBulkCopy 上传带有统计信息的 excel 文件。该文件有多个工作表,我需要将工作表的名称添加到数据库中每一行的列中。工作表的名称不会更改,因此可以对名称进行硬编码。我该如何解决这个问题?

0 投票
2 回答
7214 浏览

sql-server - 如何从 ODBC 数据库导入表?

我有一个 ODBC 数据库(一些第三方数据库),其中有一堆表。我可以使用“GetSchema”来获取其中的表列表。我也可以利用 SQLBulkCopy 将这些表中的数据复制到 SQL Server 表中(仅当我在 SQL Server 中创建了具有相同结构的目标表时)。

但这是场景 - 对 ODBC 数据库应用了更新,现在它有一个新表(我可以通过比较 ODBC 数据库中的旧表和新表列表来弄清楚这一点。

有没有办法导入整个表(空或带有数据)或为源表生成 SQL 脚本,以便可以在使用批量复制操作之前创建目标表?

谢谢研发

0 投票
2 回答
7113 浏览

sqlbulkcopy - SqlBulkCopy 的缺点是什么

我已经对“使用 C# 将大量数据插入 DB 的最佳方法”进行了一些研究,然后很多人只是建议我使用 SqlBulkCopy。试了之后,真的让我大吃一惊。毫无疑问,SqlBulkCopy 非常非常快。看来 SqlBulkCopy 是插入数据(尤其是大数据)的完美方式。但是我们为什么不一直使用它。使用 SqlBulkCopy 有什么缺点吗?