Bulk insert data into SQL database table

 2009-04-02    Import & Export    1    347

Updating a database with new records using separate INSERT commands for each new record can sometimes take very long time, especially if there are many thousands of new records to insert. One way to speed up this process can be to use the BULK INSERT command to update the SQL database in a significantly quicker way, e.g. in 1 minute instead of 20 minutes when inserting each record separately (100 000 records).

With the function below you can upload a tab-separated text file (without headings) to an SQL data table very quickly compared to using separate SQL insert statements for each record. The source file should be in Unicode format if it contains non-English characters. Click here for information on how to create a text file in Unicode format.

After creating the tab-separated text file with the new data for the SQL server, copy the file to a folder on the SQL server, e.g. using FTP. You might also need to contact the database administrator and ask to be granted permission to run the BULK INSERT command.
Then you can use the function below to bulk load the contents into the database.
Note! You have to edit the 3 constants in the function below before using it.

Function PerformBulkUpload(cn As ADODB.Connection, strSourceFileName As String, Optional blnTruncateTable As Boolean = False) As Boolean
' strSourceFileName must be the full pathname to the file on the SQL server, e.g.: F:\FTP\USERID\NewUploadedData.txt
Const cstrDataBaseName As String = "MYDATABASE"
Const cstrDataBaseUser As String = "dbo"
Const cstrDataBaseTable As String = "MyTableName"
Dim strSQL As String, lngCount As Long
    PerformBulkUpload = False
    If cn Is Nothing Then Exit Function
    If Len(strSourceFileName) < 6 Then Exit Function

    If cn.State = adStateOpen Then
        PerformBulkUpload = True
        With cn
            If blnTruncateTable Then
                strSQL = "truncate table " & strTargetTable
                .Execute strSQL, , adCmdText
            End If
            If Len(strSourceFileName) > 0 Then
                strSQL = "bulk insert [" & cstrDataBaseName & "].[" & cstrDataBaseUser & "].[" & cstrDataBaseTable & "] "
                strSQL = strSQL & "from '" & strSourceFileName & "' "
                strSQL = strSQL & "with (DATAFILETYPE = 'widechar', FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n')"
                On Error GoTo BulkLoadError
                .Execute strSQL, lngCount, adCmdText
                On Error GoTo 0
            End If
            .Close
        End With
    End If
    Exit Function

BulkLoadError:
    MsgBox Err.Description
    PerformBulkUpload = False
    Resume Next
End Function