从Access迁移到SQL Server

时间:2017-08-31 17:01:58

标签: sql sql-server database vba ms-access

我最近将应用程序的数据库从MS Access移到了SQL Server。而且我感到非常震惊 - 即使拥有一台优秀的服务器 - 来自前端Access的大多数INSERT INTO查询都非常慢。以前在检索数据时我将它放入临时访问表中,然后在检索完成后我做了:

INSERT INTO permanentTable
    SELECT * 
    FROM tmpTable ;

将所有记录移至permanentTable只需不到1分钟。

现在使用SQL Server略有不同 - 插入80行大约需要5-6分钟。我试图通过删除索引来优化查询(它是一个包含40列的表) - 而且它根本不快。在运行查询时服务器本身 - 它真的很快。有什么不对?试图逐个插入 - 一行插入大约需要5秒钟。

从MS Access我使用ODBC连接ADODB.conn字符串和ADODB.execute方法。

我使用的代码类似于:

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

此外,这是我的连接字符串的样子:

Dim conn As ADODB.Connection 
Dim sConnString As String 
' Create the connection string. 
sConnString = "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 sConnString 
conn.Execute (query) 
conn.Close 

我正在运行的查询是:

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

1 个答案:

答案 0 :(得分:0)

找到了解决此问题的极快解决方案。基本上,从Access表中选择所有内容然后将其插入SQL Server并不好,转移表也很慢,另外一行接一行也不是很快。解决方案是批量更新。

基本上我将我的字符串存储在

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