我使用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
表中,因为它在该文件中。但是当我运行这个程序时,它会给我带来不希望的结果。数据未按文件排序。
示例输出:
首先运行:
第二轮:
同样,每次提供不同的数据。
我该怎么办才能获得文件中的数据?
答案 0 :(得分:0)
我可以想出将数据按顺序排列到表中的唯一方法是使用带有标识列的表,然后在order by子句中使用它。我没有尝试过,但我认为可以使用带有批量插入的格式文件来执行此操作,以便您只将数据加载到文本列。使用视图也是可能的,但不能使用temp。表。