【发布时间】:2019-02-04 17:25:16
【问题描述】:
我正在使用 SQL Server 批量插入命令将带有终结符的 EDI 文件内容插入到我的表中,但是,有时顺序或行会变得混乱,例如:
BULK INSERT dbo.NDCArchitectBulkInsert
FROM '\\FTP\\TestFiles\\abc'
WITH (ROWTERMINATOR = '~')
文件(abc)内容:
Line 139 This is line 139~
Line 140 This is line 140~
...
Line 149 This is line 149~
Line 150 This is line 150~
Line 151 This is line 151~
...
Line 160 This is line 160~
Line 161 This is line 161~
Line 162 This is line 162~
批量插入后,我的表格行将是:
Line 139 This is line 139~
Line 140 This is line 140~
...
Line 149 This is line 149~
Line 160 This is line 160~
Line 161 This is line 161~
Line 150 This is line 150~
Line 151 This is line 151~
Line 162 This is line 162~
第 160 行和第 161 行不知何故在第 149 行和第 150 行之间插入/混乱,这似乎发生在随机行号上,我已经测试过它是否是数据问题,但不是……有人有任何相关的经验和解决方案吗在那个附近?
【问题讨论】:
-
我假设您的目标表没有键或索引,对吗?无论如何,您都不应该关心数据在表中的存储顺序。如果您确实关心,则必须应用聚集索引。据我所知,批量插入不保证按“源顺序”保存记录
-
您的 EDI 文件中是否有行号?它是必须按顺序出现的标题/详细信息类型结构吗?
-
@Brian,你说得对,我的目标表没有键或索引或行号,有人告诉我在批量插入时有 line_number 列不好。
-
@Nick.McDermaid,我的 EDI 文件中没有行号,它就像一个标题/详细信息类型的结构,但我不知道我的 BulkInsert 是否识别...
-
你需要一个行号列。将
IDENTITY列添加到表中,然后创建一个视图,列出所有列除了 标识列,然后插入到该视图中。虽然我在任何地方都找不到任何技术保证,但这一直对我有用。
标签: sql sql-server bulkinsert edi