Sql server 如何通过慢速连接使用“插入到”将访问SQL/Server的记录插入到SQL/Server

Sql server 如何通过慢速连接使用“插入到”将访问SQL/Server的记录插入到SQL/Server,sql-server,ms-access,ms-access-2007,Sql Server,Ms Access,Ms Access 2007,这是我试过的。我还错过了什么或应该尝试什么 我的情况: SQL/Server在另一个国家/地区- 直接互联网连接 不可靠的专用线路 成本过高,线路状况不断变化,ping 180至500+ 通过VPN连接访问SQL/Server-速度非常慢,但干净/可靠 在美国访问ACCDB ace数据库-容量小,工作正常 需要插入到select*from中 我尝试了以下所有方法: DAO-currentdb.execute运行Access SQL,OLEDB通过VPN连接到远程SQL/Server-可以使用in

这是我试过的。我还错过了什么或应该尝试什么

我的情况:

SQL/Server在另一个国家/地区- 直接互联网连接 不可靠的专用线路 成本过高,线路状况不断变化,ping 180至500+ 通过VPN连接访问SQL/Server-速度非常慢,但干净/可靠 在美国访问ACCDB ace数据库-容量小,工作正常 需要插入到select*from中 我尝试了以下所有方法:

DAO-currentdb.execute运行Access SQL,OLEDB通过VPN连接到远程SQL/Server-可以使用insert into非常慢

ADO使用Access SQL-甚至更慢

仅限OLEDB,向远程SQL/Server发出的SQL命令看不到本地ACCDB文件,因此您必须循环遍历记录集,为每个记录生成SQL语句。非常慢。很多额外的编码

OLEDB访问链接到SQL/Server的表。读取数据速度快,插入记录速度慢

两端都是SQL/Server。本地SQL/Server将表链接到ACCDB和远程服务器。可以工作,但不能提高速度。插入1000条相当小的记录需要5分钟以上的时间

批量插入。不能这样做,源数据不是文本文件,而是ACCDB。这不是一次性转换,而是每天更新新的/更改的记录

SSIS—看起来很快,因为我能够快速迁移整个数据库,但对于日常使用普通的插入和删除,它看起来并不合适或容易

尚未尝试:SQL/Server订阅服务器发布服务器镜像/复制以使远程表保持虚拟本地

所以,令人惊讶的是,我发现DAO对远程ACCDB没有SQL/Server通过VPN比SQL/Server快20倍。但是,我更愿意使用SQL/Server


我还遗漏了什么或应该尝试什么?

仔细检查SQL Server上是否启用了TCP/IP连接,并且实际上客户端正在使用TCP/IP连接,而不是命名管道-如果使用OLEDB stick;连接字符串末尾的networklibrary=DBMSSOCN以强制执行此操作


您是否尝试过从远程SQL server拉取?i、 e.您的应用程序调用使用OPENROWSET/OPENQUERY从本地SQL server提取数据的存储过程?-对于具有不对称上升/下降速度的连接非常有用。

有趣-谢谢。我正在使用SSMS进行测试。远程服务器上已启用TCP/IP和命名管道。如何强制使用SSMS?Re:Pull-要拉取的数据位于Access数据库中,但可以将ACCDB作为链接服务器添加到本地SQL/server。远程服务器上的OpenRowSet查询会看到它吗?我会试试。在SMSS中,单击“登录”对话框上的“选项”后,它应该位于“连接选项”选项卡上。从access(它只是一个文件而不是服务器托管的应用程序)拉取的问题是,它可能必须通过network.Thx拉取整个文件。也许我不知道如何在服务器之间插入REC。我的SQL命令作为Insert into vpn.db.dbo.table fieldlist从openrowset'Microsoft.ace.oledb.12.0'、'z:\myfile.accdb'中选择字段列表在本地SQL server上运行,其中vpn是链接服务器的mytable具有连接信息,因此我将tcp:放在IP地址前面,这不应该强制它吗?没有速度差。还有更好的办法吗?我下一步就试试拉;不太清楚如何访问,但我想我需要一个链接服务器来访问本地的db并在远程上运行此查询:insert into remotetable fieldlist select fieldlist from openrowset on local>。我的想法对吗?拉取假设我可以从远程访问本地服务器,比如IP地址。我正在使用无法从远程访问的本地SQL/Express进行测试,因此我必须设置不同的环境,对吗?远程必须能够连接到本地。从本地将两台服务器都放在SSM中不会有帮助。我不做这种事情,但有一种方法可以在ADO中使用批处理模式执行DML。使用ODBC的问题在于,它将每个记录作为独立的插入发送,因此需要将其强制为批处理模式插入,而据我所知,ADO方法是唯一的方法。但我并没有把这篇文章作为一个答案,因为我的建议中包含了过多的挥手行为谢谢你的想法-我开始在SqlBulkCopy类中查找这个。有人知道如何在T-SQL中实现这一点吗?还是只有ADO.NET?我会在这方面做一个单独的帖子。