批量插入如何在 SQL Server 2017 中使用格式文件跳过列

Bulk Insert how to skip column using format file in SQL Server 2017

我有一个场景 table 有 5 列,但数据 (CSV) 文件只有 2 列数据。因为第一列是身份列,所以第四和第五列有默认约束。所以这些列不需要来自 CSV 的值。请注意 CSV 将始终包含所有值(双引号中的行和列)

我试图通过参考此 link 来跳过第一列:https://docs.microsoft.com/en-us/sql/relational-databases/import-export/use-a-format-file-to-skip-a-table-column-sql-server?view=sql-server-2017 但似乎我遗漏了一些东西,因为在执行批量插入命令时我得到一个

Cannot bulk load CSV file. Invalid terminator is specified for source column number 2 in the format file "C:\MyData\Demo1_Format.fmt". All source column terminators must be the same except the last one when CSV format is specified. Only row terminator should be different

我的代码:

CREATE table dbo.test1
(
    [UniqueID] [BIGINT] IDENTITY(1,1),
    [Id] CHAR(1) NOT NULL,
    [Name] [VARCHAR](50) NOT NULL,
    [IsDelete] [TINYINT] NULL DEFAULT 0,
    [Rootpid] VARCHAR(25) NULL 
         CONSTRAINT defVal_RootPid_TEST1 DEFAULT '20190110035929_x9zh5'
);

Demo1_Format.fmt

14.0
3
1 SQLCHAR 0 0 "\"" 0 "" ""
2 SQLCHAR 0 9999 "\",\"" 2 Id ""
3 SQLCHAR 0 9999 "\"\r\n" 3 Name ""

Demo1.csv

"Id","Name"
"1","James"
"2","Scott"

T-SQL:

BULK INSERT dbo.test1 from 'C:\MyData\Demo1.csv'
WITH 
    (FORMAT = 'CSV', 
     FIRSTROW = 2, 
     FORMATFILE = 'C:\MyData\Demo1_Format.fmt')

Update 当我删除 Format = 'CSV' 参数并保持格式文件不变时它就可以工作了。但我需要格式参数,因为它有几个好处,比如处理双引号、换行符、数据中的特殊字符问题。那么我不能同时使用格式化文件来跳过列和 format='CSV' 参数来处理数据问题吗?

你能试试这个格式文件吗:我认为新的 Format=CSV 选项在某种程度上认为 Format File 不再需要做...

14.0
2
1       SQLCHAR             0       1       ","      2     Id           SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR             0       50      "\r\n"   3     Name         SQL_Latin1_General_CP1_CI_AS