SQL Server 2016中批量加载期间出错

时间:2018-04-16 18:39:39

标签: sql-server bulk-load

我正在尝试对.txt文件使用批量插入,该文件使用逗号分隔,但是一些列也有双引号,因此在使用批量插入时,某些行未正确插入。 / p>

我正在使用带有fmt文件的批量插入但它仍然给我错误:无法批量加载。格式文件" \ server \ Data \ Transfer \ formatfile1.fmt"中的列号无效。

我没有选择去思考我创建的格式文件有什么问题。

以下是.txt格式的数据

"NUMBER","DATE","JOIN_NUMBER","CEO","FAX","ACTNUM"
1,3/31/2005 0:00:00,2,,"9037983933",5
6,3/31/2005 0:00:00,7,,"5048899070",7
7,3/31/2005 0:00:00,8,,"2289384313",7
12,3/31/2005 0:00:00,11,"Tom Johnson, SVP","8607611980",8
13,3/31/2005 0:00:00,12,,"2252146851",3

这是格式文件:

13.0
6
1       SQLCHAR 0       5        ",\""      1     NUMBER        SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR 0       50  ",\""       2     DATE      SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR 0       20  ",\""       3     JOIN_NUMBER   SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR 0       500 "\",\""     4     CEO       SQL_Latin1_General_CP1_CI_AS
5       SQLCHAR 0       12  "\",\""     5     Fax       SQL_Latin1_General_CP1_CI_AS
6       SQLCHAR 0       10  "\"\r\n"    6     ACTNUM        SQL_Latin1_General_CP1_CI_AS

我正在使用SQL Server 2016.

这是我尝试用于批量插入的SQL代码:

GO 
SET ANSI_WARNINGS OFF 
GO

BULK INSERT FDICDev.dbo.fs220D_test
FROM '\\server\Data\Transfer\textdata.txt'
WITH    ( FIRSTROW = 2,
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n',
    FORMATFILE = '\\server\Data\Transfer\formatfile1.fmt'    )

有人可以指出这里发生的问题!!!

1 个答案:

答案 0 :(得分:0)

您的格式文件错误。您告诉它期望双引号字符作为列终止符的一部分,以及每列。但是,只有第5和第6列符合报价。

只是逗号的终结符应该用template<typename... Ts> constexpr void PrintTuple(std::tuple<Ts...>& tuple)表示。

只有在逗号的两边都需要引号字符时才应包含","

Here's a helpful tutorial