Я использую 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
так, как есть в этом файле. Но когда я запускаю эту процедуру, это дает мне нежелательные результаты. Данные не упорядочены, как в файле.
Пример вывода:
Первый запуск:
Второй запуск:
Кроме того, каждый раз, когда она дает разные данные.
Что мне делать, чтобы получить данные так, как есть в файле?
См. [Этот вопрос] (http://stackoverflow.com/questions/2642928/sql-server-table-is-sorted-by-default) - данные в таблице не отсортированы. Вы должны указать порядок сортировки (на основе данных в таблице) при запросе иначе результаты могут быть возвращены в любом порядке. – aucuparia
В таблице SQL Server ** отсутствует порядок ** (без указания по умолчанию или системного заказа). Если вам нужен заказ, вы ** должны явно указать ** 'ORDER BY', когда вы выберете из этой таблицы –
данные в отношении, вообще говоря, неупорядочены (или, как представляется, в некотором естественном порядке) – user1455836