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

标签 sql-server openrowset aceoledb

我有一个有 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。是否有任何行的每一列都有一个没有空格和/或异常格式的标题?如果需要,这是需要考虑的。

关于sql-server - 并非所有行都使用 SQL Server 中的 OPENROWSET 从 Excel 文件导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64152307/

相关文章:

sql - 为多个分层组优化 SUM OVER PARTITION BY

sql - 在 OPENROWSET 查询中使用变量

sql - ACE.OLEDB.12 的替代方案,用于查询 Excel 数据表

sql-server - SQL 网络实例相关问题(错误 258)

sql-server - 如何使用 'hierarchyid' 参数从 EntityFramework 6 调用存储过程

azure-sql-database - 执行 OPENROWSET (BULK)/Azure SQL 数据库时出错

c# - 当有 166,110 行时,Microsoft ACE OLEDB 连接创建空 Excel

sql - 使用 vb.net 将表脚本编写为 CREATE TO

sql-server-2005 - 通过 Openrowset 和 Microsoft.ACE.OLEDB.12.0 从 csv 导入(到不同的列)