Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
Ms access 如何通过传递查询将Access表中的数据附加到SQL server表中?_Ms Access_Sql Server 2008 R2_Append_Pass Through - Fatal编程技术网

Ms access 如何通过传递查询将Access表中的数据附加到SQL server表中?

Ms access 如何通过传递查询将Access表中的数据附加到SQL server表中?,ms-access,sql-server-2008-r2,append,pass-through,Ms Access,Sql Server 2008 R2,Append,Pass Through,似乎只有使用直通查询才能从SQL Server表检索数据并将其导入MS Access。但另一方面呢?从Access表到SQL server表 当我需要高性能时,MS Access中有哪些选项(将追加查询追加到链接表的正常方法是太慢了) 在传递查询中,我无法引用MS Access表或查询,因此INSERT INTO语句无法工作。是否可以通过VBA解决问题?您可以在直通查询中使用OPENROWSET SELECT id, atext INTO anewtable FROM OP

似乎只有使用直通查询才能从SQL Server表检索数据并将其导入MS Access。但另一方面呢?从Access表到SQL server表

当我需要高性能时,MS Access中有哪些选项
(将追加查询追加到链接表的正常方法是太慢了


在传递查询中,我无法引用MS Access表或查询,因此INSERT INTO语句无法工作。是否可以通过VBA解决问题?

您可以在直通查询中使用OPENROWSET

SELECT id,
       atext
INTO   anewtable
FROM   OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                  'z:\docs\test.accdb'; 'admin';'',table1); 
您可能需要以下部分或全部选项:

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',
     N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
     N'DynamicParameters', 1
GO

我怀疑它会更快。

在Access中,可以使用宏使用SetValue动态创建传递查询定义(我认为现在称为SetProperty)。基本上,您可以更新现有直通查询的查询定义,然后运行它。我做过一次,速度快了很多,但那是很久以前的事了。我可能有一块VB,它在一个表中循环创建查询。

在这个方向上链接总是很慢,因为Access将在本地处理所有工作,因此您无法利用服务器。如果您具有某种级别的SQL server访问权限,那么我一直认为最好的方法是从access导出到标准txt或csv文件,然后使用SQL server的大容量插入选项。如果您被迫从访问端执行所有操作,那么不幸的是,没有一个真正快速的方法可用。我可能会尝试使用DAO(在VBA中)或ADO来比较速度。您还可以尝试将ADO与SQL Server存储过程一起使用。但我同意Matt的观点,你最大的收获可能是通过访问以外的其他方式实现的。即使是一个.NET dll或加载项也可以工作,因为我相信其中任何一个都可以使用后台线程(不过这可能会有问题)。谢谢您的输入。这似乎揭示了访问中的另一个限制,除了它有许多其他限制。现在我当然同意这里的评论,即某种类型的批量传输方法,在这种方法中,您可能将数据放在SQL server所在的服务器上,在这里肯定会产生巨大的希望。至于SQL server的访问限制,根据定义,直通式查询意味着该查询将在SQL server上运行服务器端,因此从逻辑上讲,如果假设这是某种限制,显然,我们谈论的是SQL server的限制,而不是访问权限,对吗?@AlbertD.Kallal:感谢您对本主题的贡献。你的意见肯定会让我们更清楚地了解这场辩论中的细微差别。我之所以将“问题”列为访问限制,是因为问题最初被认为是这样的,因为我在Access GUI中,并使用特定于访问的功能,如传递查询。因此,令人惊讶的是,根本原因可以被看作是SQL server的局限性。