Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Access移动到SQL Server_Sql_Sql Server_Database_Vba_Ms Access - Fatal编程技术网

从Access移动到SQL Server

从Access移动到SQL Server,sql,sql-server,database,vba,ms-access,Sql,Sql Server,Database,Vba,Ms Access,我最近将应用程序的数据库从MS Access移动到SQL Server。我真的很震惊——即使有一个好的服务器——大多数前端访问的插入到查询中的速度都非常慢。以前在检索数据时,我将其放入临时访问表中,然后在检索完成后,我执行了以下操作: INSERT INTO permanentTable SELECT * FROM tmpTable ; 将所有记录移动到permanentTable只需不到1分钟 现在使用SQL Server时略有不同—插入80行大约需要5-6分钟。我试图通过

我最近将应用程序的数据库从MS Access移动到SQL Server。我真的很震惊——即使有一个好的服务器——大多数前端访问的
插入到
查询中的速度都非常慢。以前在检索数据时,我将其放入临时访问表中,然后在检索完成后,我执行了以下操作:

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")

找到了这个问题的极快解决方案。基本上,从Access表中选择所有内容并将其插入SQL Server是不好的,传输表的速度也很慢,而且一行接一行地插入也不是很快。解决方案是批量更新

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

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

从临时表插入80行不应花费5-6分钟。还有一些事情发生了。你好,戈登,我正在使用ADODB连接到SQLServer。我认为这是唯一正确的方法?我没有直接链接表进行访问。
“在运行查询时,在服务器本身上-速度非常快。”
-那么问题出在哪里?您还在哪里运行查询?您还在那里做什么?如果在SQL Server上测试查询时,它按预期工作,那么问题显然不是SQL Server。临时表是否在本地访问,并且正在插入远程(链接)SQL Server表?不要将连接放入SQL Server。通过ODBC链接表permanentTable并运行普通更新查询。