0

我有一个包含 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 行。请帮我解决这个问题。谢谢。

4

2 回答 2

0

这是一个想法.. 为什么不提交每 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  
于 2013-09-18T05:44:33.047 回答
-1

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

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

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

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

于 2013-03-14T02:17:50.503 回答