批量插入如何在 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
我有一个场景 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