问题描述
我有一个包含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。是否有行的每一列的标题是否都没有空格和/或异常格式?如果需要,可以考虑一下。