お世話になります。
現在、Visual Studio 2008とSQL Serverを使用して開発をしております。
今回はCSVファイルから取り込んだデータを仮テーブル(以降テーブルA)にデータを取り込み、
その後、本テーブル(以降テーブルB)へ移行させるプログラムを作成しております。
データを移行させる際、データを加工したり、別テーブルから値を取得したりした上で
INSERTを実施しておるのでものすごく時間を要しております。
現在、約10万件のデータを移行するのに1時間ほどかかってしまっております。
今後、更に大量のデータを移行することになるととんでもない時間がかかってしまうのは明らかです。
何か良い方法はありませんでしょうか。
よろしくお願いいたします。
尚、以下のコードですが、INSERTする[テーブルB]は本来は他にまだいくつかフィールドを持っておりますが
ご説明すると長くなるのでカットさせて頂いていますが、やっていることは以下に書かせて頂きましたような
変換を行っております。
VB.NET
1 2Dim mstrSQL As String 3Dim dstTest As DataSet 4Dim dstCustSer As DataSet 5Dim intCustSer As Integer 6Dim strDate As String 7Dim strName As String 8 9 mstrSQL = "" 10 mstrSQL = "SELECT * FROM [テーブルA]" & vbCrLf 11 mstrSQL &= " LEFT JOIN [テーブルC] ON [テーブルA].ID = [テーブルC].ID" & vbCrLf 12 13 dstTest = (ここでデータセット取得) 14 15 If dstTest.Tables(0).Rows.Count > 0 Then 16 'シリアル取得 17 For i = 0 To dstTest.Tables(0).Rows.Count - 1 18 19 mstrSQL = "" 20 mstrSQL = "SELECT * FROM [テーブルD]" & vbCrLf 21 mstrSQL &= " WHERE ID= " & dstTest.Tables(0).Rows(i)("ID") & vbCrLf 22 23 dstCustSer = (ここでデータセット取得) 24 25 If dstCustSer.Tables(0).Rows.Count > 0 Then 26 intCustSer = dstCustSer.Tables(0).Rows(0)("CustSer") 27 Else 28 intCustSer = 0 29 End If 30 31 '日付 32 strDate = "" 33 If IsNothing(dstTest.Tables(0).Rows(i)("Date")) = False Then 34 If IsDBNull(dstTest.Tables(0).Rows(i)("Date")) = False Then 35 strDate = Microsoft.VisualBasic.Left(dstTest.Tables(0).Rows(i)("Date"), 4) & "年" _ 36 & Microsoft.VisualBasic.Mid(dstTest.Tables(0).Rows(i)("Date"), 6, 2) & "月" _ 37 & Microsoft.VisualBasic.Mid(dstTest.Tables(0).Rows(i)("Date"), 9, 2) & "日" 38 End If 39 Else 40 strDate = "" 41 End If 42 43 '名前 44 strName = "" 45 If IsNothing(dstTest.Tables(0).Rows(i)("Name")) = False Then 46 If IsDBNull(dstTest.Tables(0).Rows(i)("Name")) = False Then 47 strName = dstTest.Tables(0).Rows(i)("Name") 48 Else 49 strName = "" 50 End If 51 Else 52 strName = "" 53 End If 54 55 mstrSQL = "" 56 mstrSQL = "INSERT INTO [テーブルB]" & vbCrLf 57 mstrSQL &= " (" & vbCrLf 58 mstrSQL &= "CustSerial" & vbCrLf 59 mstrSQL &= ", Date" & vbCrLf 60 mstrSQL &= ", Name" & vbCrLf 61 mstrSQL &= ")" & vbCrLf 62 mstrSQL &= " VALUES" & vbCrLf 63 mstrSQL &= " (" & vbCrLf 64 mstrSQL &= intCustSer & "," & vbCrLf 65 mstrSQL &= "'" & strDate & "'," & vbCrLf 66 mstrSQL &= "'" & strName & "'," & vbCrLf 67 mstrSQL &= ")" & vbCrLf 68 69 Next 70 71 End If
回答4件
あなたの回答
tips
プレビュー