我能够在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)".
答案 0 :(得分:1)
是的,您可以使用format file
文档bcp
,并将-f
命令与-f format_file_name.fmt
选项一起使用lastupdateddate
。
另一种选择是;导入所有数据(我的意思是所有字段),然后使用SQL
删除非想要的列ALTER TABLE your_bulk_insert_table DROP COLUMN lastupdateddate
{{1}}