SQL Server批量插入EDI文件-行顺序混乱

时间:2018-08-29 20:29:22

标签: sql sql-server bulkinsert edi

我正在使用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行之间,这似乎发生在随机的行号上,我已经测试了它是否是数据问题,但不是……有人没有任何相关经验和解决方案周围吗?

1 个答案:

答案 0 :(得分:2)

他们没有被插入“混乱”。您如何检索?嗯,这就是问题所在。结果集(如表)本质上是无序。因此,如果仅使用select查看数据,则可能会看到乱序。

最简单的解决方案是,如果第一列是行号或其他内容。然后,您可以执行以下操作:

select abc.*
from abc
order by abc.linenumber;

一切都会好起来的。

编辑:

如果需要添加行号,则可以加载到视图中。像这样:

CREATE TABLE NDCArchitectBulkInsert (
    NDCArchitectBulkInsertId int identity(1, 1) primary key,
    . . .  -- rest of the columns
);

CREATE VIEW v_NDCArchitectBulkInsert as 
    SELECT . . .  -- rest of columns but not id
    FROM NDCArchitectBulkInsert;

BULK INSERT v_NDCArchitectBulkInsert 
FROM '\\FTP\\TestFiles\\abc' 
WITH (ROWTERMINATOR = '~');

我不是100%肯定行为会得到保证,但是我认为在实践中这将按插入顺序更新身份。