Файл EDI групповой вставки SQL Server - порядок строк перепутан - PullRequest
0 голосов
/ 29 августа 2018

Я использую команду SQL Server Bulk Insert для вставки содержимого файла 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 голосов
/ 29 августа 2018

Они не вставлены "перемешаны". Как вы восстанавливаете? Ах, вот в чем проблема. Наборы результатов (например, таблицы) по своей природе неупорядочены . Итак, если вы смотрите на данные, используя только select, то вы можете увидеть вещи не в порядке.

Самое простое решение - это если в первом столбце указан номер строки или что-то еще. Тогда вы можете сделать:

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

И все будет выглядеть правильно.

EDIT:

Если вам нужно добавить номер строки, вы можете загрузить в представление. Примерно так:

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%, что поведение гарантировано, но я думаю, что на практике это обновит личность в порядке вставки.

...