Sql server 2008 大容量插入大型CSV文件并附加一列
我能够在SQLServer2008R2数据库上使用大容量插入来导入一个超过200万行的CSV文件(以制表符分隔)。计划每周运行此命令 我在生成的表中添加了一个名为“LastUpdateDate”的列来存储日期戳,因为行是通过插入触发器更新的。但当我再次运行大容量插入时,由于列不匹配,它失败了,因为原始CSV文件中没有这样的字段 是否可以将大容量插入配置为在运行时忽略“LastUpdateDate”列 谢谢 --编辑: 我尝试使用格式化文件,但仍然无法解决问题 表如下所示Sql server 2008 大容量插入大型CSV文件并附加一列,sql-server-2008,sql-server-2008-r2,bulkinsert,Sql Server 2008,Sql Server 2008 R2,Bulkinsert,我能够在SQLServer2008R2数据库上使用大容量插入来导入一个超过200万行的CSV文件(以制表符分隔)。计划每周运行此命令 我在生成的表中添加了一个名为“LastUpdateDate”的列来存储日期戳,因为行是通过插入触发器更新的。但当我再次运行大容量插入时,由于列不匹配,它失败了,因为原始CSV文件中没有这样的字段 是否可以将大容量插入配置为在运行时忽略“LastUpdateDate”列 谢谢 --编辑: 我尝试使用格式化文件,但仍然无法解决问题 表如下所示 USE Adventur
USE AdventureWorks2008R2;
GO
CREATE TABLE AAA_Test_Table
(
Col1 smallint,
Col2 nvarchar(50) ,
Col3 nvarchar(50) ,
LastUpdatedDate datetime
);
GO
csv“data.txt”文件为:
格式文件如下所示:
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)".
是的,您可以使用文档中的
格式文件
,并将该格式与bcp
命令和-f
选项一起使用,如-f format\u file\u name.fmt
那么另一个选择是,;导入所有数据(我指的是所有字段),然后使用类似SQL的方法删除不需要的列lastUpdateDate
ALTER TABLE your_bulk_insert_table DROP COLUMN lastupdateddate
它可以忽略格式文件中未指定/映射的列?是,未映射的列将被忽略。另外,请检查编辑后的答案以获得备选答案。对不起,“LastUpdateDate”列是我添加到表中的,它不存在于原始CSV文件中。此列应按计划通过触发器自动更新。如果它不在CSV中,则根本没有问题。。正确的?如果你不想要那个专栏,那就放下它。我自己修好了。问题在于第三个字段的终止符。应该是“”\r\n“”,而不是“”。
ALTER TABLE your_bulk_insert_table DROP COLUMN lastupdateddate