并非所有行都是使用SQL Server中的OPENROWSET从Excel文件导入的

问题描述

我有一个包含47列和14K行的Excel表。我使用OPENROWSET将这些数据导入到sql Server:

INSERT INTO dbo.my_table
SELECT * FROM OPENROWSET
(
    'Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=Yes;Database=C:\ExcelFile.xlsx','SELECT * FROM [Sheet1$]'
);

但是,仅导入了5138行。一段时间后,导入的行数减少到5052,即每次-不同的行数。 但是,当我使用Tasks -> Import Data...时,所有行都将成功导入。 这种行为的原因是什么?

我正在使用sql Server 2017 14.0.3356.2。

解决方法

SQL Server代码的语法与Docs中的示例代码略有不同。为了完全符合文档中代码的语法,它应该看起来像这样

INSERT INTO dbo.my_table
SELECT * FROM OPENROWSET
(
    'Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=Yes;Database=C:\ExcelFile.xlsx',[Sheet1$]
);

工作表[Sheet1 $]的名称不再位于引号内,并且删除了类似SQL的代码(“ SELECT * FROM”)。

另一个可能的问题是指定HDR = Yes。是否有行的每一列的标题是否都没有空格和/或异常格式?如果需要,可以考虑一下。