Passer de l'access à SQL Server

J'ai récemment déplacé la database de ma request de MS Access à SQL Server. Et je suis vraiment choqué – même si j'ai un bon server – la plupart des requêtes INSERT INTO de l'access frontal sont horriblement lentes. Auparavant, lors de la récupération des données, je l'ai mis dans la table d'access temporaire, puis après l'extraction est terminée, j'ai fait:

 INSERT INTO permanentTable SELECT * FROM tmpTable ; 

Et il a fallu less d'une minute pour déplacer tous les loggings vers permanentTable .

Maintenant, avec SQL Server, c'est légèrement différent – l'insertion de 80 lignes prend environ 5-6 minutes. Et j'essayais d'optimiser la requête (c'est une table avec 40 colonnes) en supprimant l'index – et ce n'est pas rapide du tout. Sur le server lui-même lors de l'exécution de la requête – c'est vraiment rapide. Qu'est-ce qui peut être mauvais? Je ai essayé de l'insert un par un – et il faut environ 5 secondes pour une rangée à insert.

De MS Access j'utilise la connection ODBC avec la string ADODB.conn et la méthode ADODB.execute.

J'utilise un code similaire à:

 Sub AdoOdbcExample() Dim con As Object Set con = CreateObject("ADODB.Connection") con.Open _ "Driver={SQL Server Native Client 11.0};" & _ "Server=.\SQLEXPRESS;" & _ "Database=myDb;" & _ "Trusted_Connection=yes;" con.Execute "UPDATE Clients SET FirstName='Gord' WHERE ID=5;" con.Close Set con = Nothing End Sub 

De plus, voici à quoi ressemble ma string de connection:

 Dim conn As ADODB.Connection Dim sConnSsortingng As Ssortingng ' Create the connection ssortingng. sConnSsortingng = "Driver={ODBC Driver 13 for SQL Server};server=nameserver;database=dbname;trusted_connection=Yes;" ' Create the Connection Set conn = New ADODB.Connection ' Open the connection and execute. conn.Open sConnSsortingng conn.Execute (query) conn.Close 

Et la requête que je cours est:

 CurrentDb.Execute ("INSERT INTO [ODBC;Driver={ODBC Driver 13 for SQL Server};server=serverName;database=dbName;trusted_connection=Yes;].permanentTable SELECT * FROM tmpTable") 

Trouvé une solution extrêmement rapide pour ce problème. Fondamentalement, il n'est pas bon de tout sélectionner depuis la table Access, puis de l'insert dans SQL Server, il est également très lent à transférer la table, en plus il n'est pas très rapide d'insert une ligne après l'autre. La solution pour cela est la mise à jour en bloc.

Fondamentalement, je stocke mes cordes dans

 Dim sBulkSsortingng as Ssortingng for i = 1 to n... sBulkSsortingng = sBulkSsortingng & "INSERT INTO...; " next i conn.Execute sBulkSsortingng, , adCmdText