下面 https://msdn.microsoft.com/en-us/library/ms188365.aspx 我可以读到:
FIRSTROW属性不用于跳过列标题。 BULK INSERT语句不支持跳过标头。什么时候 在跳过行时,SQL Server数据库引擎仅查看该字段 终止符,并不验证跳过的字段中的数据 行。
但我想这样做。为什么这不是故意的?当我跳过带有FIRSTROW = 2的标题时,我可以期待任何问题吗?
答案 0 :(得分:2)
它可以正常工作,但它需要第一行是相同的格式(意味着标题必须具有相同的FIELDTERMINATOR和ROWTERMINATOR),并且当使用firstrow = 2时,那么该数据将从第二行插入。 例如,如果我有CSV文件要导入的内容,第一行是列标题,我的代码将是这样的
BULK INSERT myTable
FROM 'C:\myTable.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
答案 1 :(得分:2)
SQL Server数据库引擎仅查看字段终止符
这是你的答案。如果您的列标题包含包含字段终止符的名称,系统将在第一行中找到错误的字段数,因此会产生极大的欢闹。你可以想象,在世界上所有的文件中,有些专栏都有
Years, since 1970
作为标题。对人类足够清楚,但机器只有规则。
如果您不知道,您的bulk insert
在CSV文件的一般情况下会失败。 CSV格式变化很大,比bulk insert
可以正确解释的更复杂。具体来说,有引用规则允许逗号包含在数据中。 SQL Server不会遵守引号。它会将逗号解释为分隔符。就像男人说的那样,
SQL Server数据库引擎仅查看字段终止符