全て、
許可されたユーザーが Excel スプレッドシートをサーバーにアップロードできるようにするアプリケーションに取り組んでいます。
それらがアップロードされると、Excel スプレッドシートのデータを読み取り、一連の検証、解析、および操作を行い、変更されたデータをタブ区切りのテキスト ファイルに書き込む従来の ASP スクリプトがあります。
次に、「一括挿入」を使用してデータをデータベースにロードする SQL Server のストアド プロシージャを開始します。
ファイルが小さい場合、プロセス全体が適切に機能します。しかし、サイズが大きくなるにつれて (15,000 行以上、5 MB 以上)、スクリプトの実行に非常に長い時間がかかります (60 秒以上)。
だから、私はそれをより効率的/高速/堅牢にする方法を探しています。
大まかに、コードは次のようになります。
'' # read the uploaded Excel file
set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & xlsfile & ";Extended Properties=""Excel 8.0;"""
set objRS = objConnection.execute("Select * from [Sheet1$]")
rows = ""
while (not objRS.EOF and Err.Number = 0)
row = objRS("col1") & vbTab & objRS("col2") & vbTab ... objRS("coln") & vbCrLF
rows = rows & row
objRS.MoveNext
wend
objRS.close
'' # Write the file
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(txtFile, 2, true)
objFile.WriteLine rows
objFile.Close
set objFSO = nothing
set objFile = nothing
ご覧のとおり、ファイル全体が「rows」という名前の変数に読み込まれ、テキスト ファイルにダンプされます。
これに代わるより良い方法はありますか?たとえば、テキスト ファイルを Excel から読み取るように行ごとに書き込む必要がありますか?
私が検討した別の可能性 - Excel ファイルを SQL Server の一時テーブルに読み込み、そこですべての検証/操作を行います。唯一の問題は、「一括挿入」に相当するものが見つからないことです。Excel でデータを 1 行ずつ読み取ってから、SQL Server の一時テーブルに 1 行ずつ書き込む必要があると思います。
アドバイスや洞察力を事前に感謝します!