我正在使用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行之间,这似乎发生在随机的行号上,我已经测试了它是否是数据问题,但不是……有人没有任何相关经验和解决方案周围吗?
答案 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%肯定行为会得到保证,但是我认为在实践中这将按插入顺序更新身份。