Массовая загрузка из локальной базы данных в связанную обновляемую таблицу ODBC SQL Server - PullRequest
0 голосов
/ 08 июня 2018

Я новичок в stackoverflow, поэтому прости меня, если я нарушу какие-либо правила форума.В настоящее время я использую MS-Access в качестве внешнего интерфейса для многих таблиц SQL-серверов, связанных с ODBC.Моя проблема возникает, когда я пытаюсь загрузить один столбец данных из локальной таблицы в «обновляемую» таблицу на сервере SQL.Простое вставление записей 10 КБ занимает более 15 минут, и я ищу решение о том, как использовать модуль VB, чтобы сократить это время.Используя эту ссылку, Как повысить производительность для массовых вставок в таблицы ODBC, связанные в Access? , я смог создать макрос, который работает примерно с той же скоростью, что и просто вставка, но мне действительно нужно увеличитьскорость, поскольку она просто слишком медленная .

Моя локальная таблица называется [tblTempSmartSSP] , которая содержит одно поле (схемы)

Моя таблица SQL-сервера, связанная с ODBC. [dbo_REF_CIRCUIT_LIST_UPDATEABLE_RM] имеет соответствующее имя поля (схемы)

Sub PtqTest()
Dim cdb As DAO.Database, rst As DAO.Recordset
Dim t0 As Single, i As Long, valueList As String, separator As String

t0 = Timer
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("SELECT circuits FROM tblTempSmartSSP", dbOpenSnapshot)
i = 0
valueList = ""
separator = ""
Do Until rst.EOF
    i = i + 1
    valueList = valueList & separator & "(" & rst!circuits & ")"
    If i = 1 Then
        separator = ","
    End If
    If i = 1000 Then
        SendInsert valueList
        i = 0
        valueList = ""
        separator = ""
    End If
    rst.MoveNext
Loop
If i > 0 Then
    SendInsert valueList
End If
rst.Close
Set rst = Nothing
Set cdb = Nothing
Debug.Print "Elapsed time " & Format(Timer - t0, "0.0") & " seconds."
End Sub

Sub SendInsert(valueList As String)
Dim cdb As DAO.Database, qdf As DAO.QueryDef

Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("")
qdf.Connect = cdb.TableDefs("dbo_REF_CIRCUIT_LIST_UPDATEABLE_RM").Connect
qdf.ReturnsRecords = False
qdf.SQL = "INSERT INTO dbo_REF_CIRCUIT_LIST_UPDATEABLE_RM (Circuits) VALUES 
" & valueList
qdf.Execute dbFailOnError
Set qdf = Nothing
Set cdb = Nothing
End Sub

Заранее благодарим за пониманиепредоставить !!

Райан

...