SQL Server BULK INSERT命令在文件中插入无序的数据

时间:2015-02-17 15:41:00

标签: sql-server

我使用SQL Server BULK INSERT将文件上传到TEMP表。我必须使用将从MyBatis调用的存储过程。

以下是完整的详细信息:

程序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

同样,每次提供不同的数据。

我该怎么办才能获得文件中的数据?

1 个答案:

答案 0 :(得分:0)

我可以想出将数据按顺序排列到表中的唯一方法是使用带有标识列的表,然后在order by子句中使用它。我没有尝试过,但我认为可以使用带有批量插入的格式文件来执行此操作,以便您只将数据加载到文本列。使用视图也是可能的,但不能使用temp。表。