问题标签 [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.
.net - SQL Server .NET SqlBulkCopy 类在异常后继续运行
我正在使用 SqlBulkCopy 插入大量数据。数据源可能有一些重复的行。在目标表中,我有一个唯一性索引。
当出现第一个重复行时,SqlBulkCopy 会引发异常并回滚内部事务。我希望它忽略异常并继续插入。(仅当例外是重复行时)。
关于这个问题有一些问题,但他们都在寻找报告重复的行,我只是不关心他们。
c# - SqlBulkCopy 在运行 WriteToServer(DataTable) 时抛出 System.FormatException
目前我正在编写一种从 CSV 文件中读取数据并导入 SQL 表的方法。
运行此方法时的问题,总是在 s.WriteToServer(dt); 处抛出异常;说
System.FormatException:字符串未被识别为有效的 DateTime。从索引 0 开始有一个未知单词。
我调试并看到所有数据都正确加载到 DataTable 中。这是我的 CSV 文件中的数据行示例
和我的 SQL 表架构:
sql-server - 在 SQL 中插入批量数据:OLEDB IRowsetFastLoad 与 Ado.Net SqlBulkCopy
我正在评估在 SQL Server 中插入大量数据的不同方法。我从 Ado.Net 中找到了SqlBulkCopy类,从 OLEDB 中找到了IRowsetFastLoad接口。据我所知,IRowsetFastLoad 不映射到 C#,这是我的基础平台,所以我正在评估是否值得为 .net 创建一个围绕 IRowsetFastLoad 的包装器,以便我可以在我的应用程序中使用它。
任何人都知道 IRowsetFastLoad 实际上是否会比 SqlBulkInsert 执行得更好——创建这样的包装器是否值得?
sql-server-2008 - 循环触发?
我得到了以下场景,
有四个表 COUNTRY, STATE, CITY, STREET
我有一个包含上述记录的 excel 文件..截至目前可能有 2000 行。
我使用 SqlBulkCopy 将数据导入临时表,让我们将表命名为 IMPORT。
我在 IMPORT 表上编写了一个用于插入的触发器,该触发器获取插入的记录并拆分国家、州、城市、街道,然后将它们插入到相应的表中。
在此触发器中,我必须进行一些条件检查,例如,如果 COUNTRY 名称已经存在,则返回 COUNTRY_ID,否则将其插入并获取新的 COUNTRY_ID。
如果 Excel 文件只有一行,则上述方法有效。一旦我将原始 Excel 用于导入,我发现触发器中的以下语句失败“从 INSERTED 中选择国家”,因为 sqlbulkcopy 使 INSERTED 具有多个记录。
表结构
国家
- Country_ID
- 国家的名字
状态
- State_ID
- Country_ID
- 州名
城市
- City_ID
- State_ID
- Country_ID
- 城市名
街道
- Street_ID
- City_ID
- State_ID
- Country_ID
- 街道名称
进口
- 国家的名字
- 州名
- 城市名
- 街道名称
那么我可以在触发器中使用循环语句来遍历 INSERTED 中的所有记录吗?
或者如何以最好的方式解决这个问题?
注意:由于他们已经在使用它,我无法控制这些表结构及其关系。
提前致谢。
c# - SqlBulkCopy WriteToServer 方法在使用数据表时不写入任何数据
以下所有处理都在本地机器上进行:
我有一个源数据库(在服务器上)和一个目标数据库(本地机器)。我有一个我希望从源复制到目标的表列表,即服务器--> 本地。
我首先使用简单的 SELECT * 语句和使用 Adpter.Fill(myDataTable) 将来自服务器的所有数据存储在 DataTable 数组中,然后将 myDataTable 添加到 DataTable 数组中。
然后在本地运行我在磁盘上的 SQL 脚本来删除本地数据库并重新创建它。使用 [RightClick--> 任务--> 生成脚本] 从 SSMS 获取脚本
删除并重新创建本地数据库后,我使用 SqlBulkCopy 和前面的 DataTable 数组将服务器数据复制到新创建的本地数据库中。
问题是,在我点击 SqlBulkCopy 部分之前,一切都按预期工作。我没有收到任何异常、没有消息,也没有触发 bcp_SqlRowsCopied 事件。数据根本没有被复制过来......这里发生了什么,我至少预计会出现某种错误......
这是控制台应用程序的完整代码: 请注意,它还没有准备好生产,因为还没有任何类型的错误处理。
c# - 3 条具有相同 ID 但使用 SqlBulkCopy 更改不同列的记录
我正在使用 SqlBulkCopy 进行转换。我目前有一个 IList 类集合,基本上我可以转换为 DataTable 以与 SqlBulkCopy 一起使用。
问题是我可以有 3 条具有相同 ID 的记录。
让我解释一下..这里有 3 条记录
基本上我需要按顺序插入它们..因此我插入记录1如果它不存在,那么如果它存在下一条记录我需要更新记录而不是插入一个新的1(注意id仍然是1)所以在在第二条记录的情况下,我替换了 ID 1 上的两列名称和地址。
最后在第三条记录中,您注意到名称不存在,但它的 ID 为 1 并且有一个曼彻斯特地址,所以我需要更新记录但不更改名称但更新曼彻斯特..因此第三条记录将使 id1 =
有什么想法我该怎么做?我很茫然。
谢谢。
编辑
好的,有点更新。在使用 SQLbulkCopy 之前,我将管理和合并我的记录。是否有可能获得成功和失败的列表......或者它是全部或没有的情况?我认为 SQLbulkCopy 除了进行更新之外别无他法?
能够插入所有内容并将失败的内容插入临时表将是理想的......因此我只需要担心纠正失败表中的那些,因为我知道的其他人都可以
vb.net - SQLBulkCopy 不起作用
这是我第一次尝试使用 sqlbulkcopy 类。当我运行它时,什么也没有发生,也没有任何错误。请帮我。
这是我的代码:-
.net - 使用 SqlBulkCopy,如何将数据插入到非默认数据库架构中的表中?
我需要将数据插入到名为Staging
using的模式中的表中SqlBulkCopy
。
看来 API 只允许您使用该DestinationTableName
属性设置目标表名称。
我该如何做到这一点?是否可以?
.net - 具有不同排序规则的 SqlBulkCopy
我需要将数据从一个数据库迁移到另一个数据库。我选择使用 SqlBulkCopy,但是遇到了问题,因为源数据库的排序规则与目标数据库不同,所以我遇到了一个异常:
谁能告诉我,如何在 SQL 查询中不直接使用 COLLATE 语句来解决这个问题?是否有一些简单的方法可以更改源数据库中所有列的排序规则?
sql-server - SqlBulkCopy 很慢,没有充分利用网络速度
在过去的几周里,我一直在创建能够复制数据库的通用脚本。目标是能够在某个服务器上指定任何数据库并将其复制到其他位置,并且它应该只复制指定的内容。要复制的确切内容在配置文件中指定。该脚本将用于大约 10 个不同的数据库并每周运行一次。最后,我们只复制了大约 3%-20% 的数据库,这些数据库大到 500GB。我一直在使用 SMO 程序集来实现这一点。这是我第一次使用 SMO,我花了一些时间来创建复制模式对象、文件组等的通用方法。(实际上帮助找到了一些糟糕的存储过程)。
总的来说,我有一个工作脚本缺乏性能(有时会超时),希望你们能提供帮助。当执行 WriteToServer 命令复制大量数据(> 6GB)时,它达到了我的 1 小时超时时间。这里是复制表数据的核心代码。该脚本是用 PowerShell 编写的。
源数据库和目标数据库位于不同的服务器上,因此我也跟踪了网络速度。网络利用率从未超过 1%,这让我感到非常惊讶。但是当我只是在服务器之间传输一些大文件时,网络利用率会飙升至 10%。我尝试将 $bulkData.BatchSize 设置为 5000,但没有真正改变。将 BulkCopyTimeout 增加到更大的数量只会解决超时问题。我真的很想知道为什么网络没有被充分利用。
还有其他人有这个问题吗?任何有关网络或批量复制的建议将不胜感激。如果您需要更多信息,请告诉我。
谢谢。
更新
我调整了几个提高 SqlBulkCopy 性能的选项,例如将事务日志设置为简单,并为 SqlBulkCopy 提供表锁而不是默认的行锁。此外,某些表针对某些批量大小进行了更好的优化。总体而言,复制的持续时间减少了约 15%。我们要做的是在不同的服务器上同时执行每个数据库的副本。但是在复制其中一个数据库时,我仍然遇到超时问题。
复制一个较大的数据库时,有一个表,我一直得到以下异常:
它在开始复制表后大约 16 分钟被抛出,该表不在我的 BulkCopyTimeout 附近。即使我得到了表最终被完全复制的异常。此外,如果我截断该表并仅为该表重新启动我的进程,则这些表将被复制而没有任何问题。但是对于那个表来说,复制整个数据库的过程总是失败。
在复制该错误表之前,我已尝试执行整个过程并重置连接,但它仍然出错。我的 SqlBulkCopy 和 Reader 在每个表之后都关闭。关于还有什么可能导致脚本每次都失败的任何建议?
目标数据库上没有此表的索引。