SQL Server BULK INSERT:为什么" FIRSTROW属性不打算跳过列标题"?

时间:2016-07-06 12:35:03

标签: sql-server bulkinsert

下面 https://msdn.microsoft.com/en-us/library/ms188365.aspx 我可以读到:

  

FIRSTROW属性不用于跳过列标题。   BULK INSERT语句不支持跳过标头。什么时候   在跳过行时,SQL Server数据库引擎仅查看该字段   终止符,并不验证跳过的字段中的数据   行。

但我想这样做。为什么这不是故意的?当我跳过带有FIRSTROW = 2的标题时,我可以期待任何问题吗?

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数据库引擎仅查看字段终止符