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$]') 

プロセスは正常に実行されましたが、60000 行ではなく 2000 行しかインポートされませんでした。この問題の解決を手伝ってください。ありがとう。

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 に答える