我已经看到几个关于这个主题适得其反的问题,所以我会尝试具体说明我的担忧......
我有一个旧的 (MS Access) 前端,我正在尝试重建,我把最让我烦恼的部分放在最后,所以我来了。任务是“抓取”一个文件(以前是 XLS),现在它更可能是它的副产品,为了示例而说 CSV。
所以这是我的第一个垫脚石,我很关心我的导入结果,根据 Pinal Dave BULK INSERT
的说法,这是一个非原子操作:
如果任何行中有任何错误,则不会插入该行,但会插入其他行。
这对我没有吸引力,因为我倾向于不信任用户输入,我想要更多控制从而能够触发错误并且不导入文件的任何部分会更好。我不确定这是否有效地消除了BULK INSERT
用于此过程的可能性?
我还尝试逐行阅读并使用LOOP
循环插入,这很有效,但不幸的是,即使在优化我的代码后我也需要很长时间,我才从 15 分钟减少到 4 分钟,而这仅适用于 850 条记录。
从 Access 前端运行时,该过程运行得如此顺利,我有点生气。那是因为DoCmd.TransferSpreadsheet
VBA 方法。这允许将 XLS 快速导入到临时表中,并从该临时表执行更新表。
我想知道在将数据从平面文件源导入 SQL Server 时,人们还尝试了哪些其他选项。诚然,我在这一点上有点困惑。
任何帮助,将不胜感激。
BULK INSERT
在VARCHAR(MAX)
我看来,那么你不应该有错误,你可以从那里根据需要操作数据并运行标准 SQL 以确保它在实际将它放入目标表之前符合你的要求。只是一个建议,但我过去就是这样做的。