2015-02-17 2 views
0

Я использую SQL Server BULK INSERT для загрузки файла в таблицу TEMP. Я должен использовать хранимую процедуру, которая будет вызываться из MyBatis.SQL Server BULK INSERT команда вставляет данные неупорядоченные с Файла

Вот полная подробно шаг за шагом:

процессуального MA060E_ITEM_IMPORT_PROC:

IF OBJECT_ID('MA060E_ITEM_IMPORT_PROC','P') IS NOT NULL 
    DROP PROCEDURE MA060E_ITEM_IMPORT_PROC; 
GO 

CREATE PROCEDURE MA060E_ITEM_IMPORT_PROC 
    @filePath NVARCHAR(100), 
    @userId  NVARCHAR(16), 
    @kinoId  NVARCHAR(50) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @bulk_insert_exec_sql NVARCHAR(1100); 

    IF OBJECT_ID('#TEMPTBL_FOR_FILE') IS NOT NULL 
     DROP TABLE #TEMPTBL_FOR_FILE; 

    CREATE TABLE #TEMPTBL_FOR_FILE 
    (
     DATA NVARCHAR(MAX) 
    ); 

    SET @bulk_insert_exec_sql = 'BULK INSERT #TEMPTBL_FOR_FILE FROM' + CHAR(39) + @filePath + CHAR(39) + ' WITH (FIRSTROW = 7,KEEPNULLS)'; --(FIELDTERMINATOR = ' + CHAR(39) + '|' + CHAR(39) + ')'; 
    EXEC(@bulk_insert_exec_sql); 

    SELECT * FROM #TEMPTBL_FOR_FILE ; 
END 

Я называю эту процедуру:

EXEC MA060E_ITEM_IMPORT_PROC @filePath = 'E:\myproc\YEM_Item_Data_20150206_40MB.TXT', @userId = 'j', @kinoId = 'MA071B' 

Файл: YEM_Item_Data_20150206_40MB.TXT

2015/02/06     Material Plant Data List      1 
-------------------------------------------------------------------------------- 
Material Plant Data List 
--------------------------------------------------------------------- 
|Material |Material Description     |MRPC|SPT|ValCl| 
--------------------------------------------------------------------- 
|8dsewre|8dsewre|mrpc9|50|7900| 
|ITem01|Item01|mrpci|50|7920| 
|ITem02|Item02|mrpci|50|7920| 
|CA0000w |BAR CODE LABEL  JAN AV    |SM0 |50 |7900 | 
|CA00002 |BAR CODE LABEL  JAN AV    |SM0 |50 |7900 | 
|CA0000d |BAR CODE LABEL  JAN AV    |SM0 |50 |7900 | 
. 
. 
. 
Total 599849 Lines 

Я хочу получить данные в таблице #TEMPTBL_FOR_FILE так, как есть в этом файле. Но когда я запускаю эту процедуру, это дает мне нежелательные результаты. Данные не упорядочены, как в файле.

Пример вывода:

Первый запуск:

Data At First Run

Второй запуск:

Data At Second run

Кроме того, каждый раз, когда она дает разные данные.

Что мне делать, чтобы получить данные так, как есть в файле?

+0

См. [Этот вопрос] (http://stackoverflow.com/questions/2642928/sql-server-table-is-sorted-by-default) - данные в таблице не отсортированы. Вы должны указать порядок сортировки (на основе данных в таблице) при запросе иначе результаты могут быть возвращены в любом порядке. – aucuparia

+0

В таблице SQL Server ** отсутствует порядок ** (без указания по умолчанию или системного заказа). Если вам нужен заказ, вы ** должны явно указать ** 'ORDER BY', когда вы выберете из этой таблицы –

+0

данные в отношении, вообще говоря, неупорядочены (или, как представляется, в некотором естественном порядке) – user1455836

ответ

0

Единственный способ, по которому я могу найти данные в упорядоченном виде в таблице, - это таблица с столбцом идентификации, а затем использовать ее в предложении order by. Я не пробовал, но я бы предположил, что это можно сделать с помощью файла формата с массовой вставкой, чтобы вы загружали данные только в текстовый столбец. Использование представления также возможно, но не с temp. столы.