【问题标题】:SQL Server Openrowset only imports 2000 rows from large excel (.xls) fileSQL Server Openrowset 仅从大型 excel (.xls) 文件中导入 2000 行
【发布时间】:2013-03-14 01:57:49
【问题描述】:

我有一个包含 60000 行数据的大型 excel 文件(约 10MB)。 我想将所有这些行导入 SQL Server 数据库。 假设文件路径是 C:\file.xls,我的查询是:

SELECT * INTO ImportedExcel FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\file.xls', 'SELECT * FROM [Sheet1$]') 

该过程运行良好,但只导入了 2000 行而不是 60000 行。 请帮我解决这个问题。谢谢。

【问题讨论】:

  • 你做过研究吗?这是怎么回事?
  • IIRC,这是 Jet 提供商在某些情况下的限制。

标签: sql-server excel openrowset


【解决方案1】:

这是一个想法。为什么不提交每 500 次左右的交易?

我们都知道 Excel 中有 65,530 条记录的限制,但我严重怀疑您是否达到了这个上限。

DECLARE @SelCount INT
-- Initialize the select count 
SET @SelCount = 0
SET @SelCount = @SelCount + 1

SELECT * INTO ImportedExcel FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\file.xls', 'SELECT * FROM [Sheet1$]') 

      -- Commit every 500 records and start a new transaction 
      IF @SelCount % 500 = 0
        BEGIN
            COMMIT TRANSACTION
            BEGIN TRANSACTION
        END
  END

IF @SelCount % 500 <> 0
  BEGIN
      COMMIT TRANSACTION
  END
GO  

【讨论】:

    【解决方案2】:

    因此,该过程“运行良好”但给出了错误的答案并且没有报告错误。是时候尝试别的东西了,你说呢?

    也许这种东西可以发挥作用。也许有一些关闭行限制的 abracadabra 设置。如果是这样,这里会有人知道。我的建议是在火车撞坏你之前下车。

    使用您喜欢的任何东西——VBA、Perl,手动——让 Excel 将数据写入(最好)制表符分隔的文件。 “另存为...”非常安全;我不记得有一次 Excel 将工作表的 部分 保存到文本文件中。然后使用 BCP 或 BULK INSERT 导入文件。

    它最初需要做更多的工作,但它很强大,并且可以让您免于观察不可靠技术的结果。

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多