BULK INSERT大型CSV文件并附加一列

时间:2014-07-17 03:31:51

标签: sql-server-2008 sql-server-2008-r2 bulkinsert

我能够在SQL Server 2008 R2数据库上使用BULK INSERT导入超过200万行的CSV文件(制表符分隔符)。该命令计划每周运行一次。

我在生成的表中添加了一个名为“lastupdateddate”的附加列,以存储通过INSERT触发器更新行的日期戳。但是当我再次运行BULK INSERT时,由于列中的不匹配而失败,因为原始CSV文件中没有这样的字段。

是否有可能配置BULK INSERT在运行时忽略“lastupdateddate”列?

感谢。

- 编辑:

我尝试使用格式文件,但仍然无法解决问题。

表格如下所示。

USE AdventureWorks2008R2;
GO
CREATE TABLE AAA_Test_Table 
   (
   Col1 smallint,
   Col2 nvarchar(50) ,
   Col3 nvarchar(50) , 
   LastUpdatedDate datetime 
   );
GO

csv“data.txt”文件是:

1,DataField2,DataField3
2,DataField2,DataField3
3,DataField2,DataField3

格式文件如:

10.0
3
1       SQLCHAR       0       7     ","     1     Col1               ""
2       SQLCHAR       0       100     ","     2     Col2               SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     ","     3     Col3               SQL_Latin1_General_CP1_CI_AS

我运行的SQL命令是:

DELETE AAA_Test_Table
BULK INSERT AAA_Test_Table
FROM 'C:\Windows\Temp\TestFormatFile\data.txt' 
WITH (formatfile='C:\Windows\Temp\TestFormatFile\formatfile.fmt');
GO

收到的错误是:

Msg 4864, Level 16, State 1, Line 2
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (Col1).
Msg 4832, Level 16, State 1, Line 2
Bulk load: An unexpected end of file was encountered in the data file.
Msg 7399, Level 16, State 1, Line 2
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 2
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

1 个答案:

答案 0 :(得分:1)

是的,您可以使用format file文档bcp,并将-f命令与-f format_file_name.fmt选项一起使用lastupdateddate

另一种选择是;导入所有数据(我的意思是所有字段),然后使用SQL

删除非想要的列ALTER TABLE your_bulk_insert_table DROP COLUMN lastupdateddate
{{1}}