Access 2010前端将查询传递到SQL Server 2014后端

Access 2010前端将查询传递到SQL Server 2014后端,sql,sql-server,vba,ms-access,Sql,Sql Server,Vba,Ms Access,我最近将Access后端转移到SQL Server,现在我知道如何将查询传递到SQL Server,让他进行计算。但这仅适用于仅包含表的查询,例如: Q_测试: SELECT * FROM T_Test 但是,如果我想将查询传递到包含另一个查询(此查询也包含一些其他查询)的服务器,该怎么办?例如: Q_测试3: SELECT * FROM Q_Test2 INNER JOIN .. Q_测试2: Select * From Q_Test.. 然后,我认为将代码转换为“仅表”SQL代码很笨拙

我最近将Access后端转移到SQL Server,现在我知道如何将查询传递到SQL Server,让他进行计算。但这仅适用于仅包含表的查询,例如:

Q_测试:

SELECT * FROM T_Test
但是,如果我想将查询传递到包含另一个查询(此查询也包含一些其他查询)的服务器,该怎么办?例如:

Q_测试3:

SELECT * FROM Q_Test2
INNER JOIN ..
Q_测试2:

Select * From Q_Test..
然后,我认为将代码转换为“仅表”SQL代码很笨拙,而且对我来说也很复杂。是否有可能以一种巧妙的方式将包含子查询的查询传递给SQL Server?我已将查询保存在Access前端中,有些是通过VBA代码打开的,有些是用表单的Recordsources编写的,需要对其进行更改才能正常工作。对于只包含表的查询,VBA代码可以工作


非常感谢您的帮助这里的主要问题是您试图让SQL Server使用SQL Server甚至不可能知道的Access结构。它对Access查询或Access文件中包含的任何其他对象一无所知

它只知道自己的对象——换句话说,在SQLServerManagementStudio的对象资源管理器中可以看到的是传递查询中可以“看到”的内容,因为这是您正在使用的环境

您应该考虑通过查询允许使用外部访问的SQLServer结构,例如存储过程或表值函数,或者在Access SQL方言中不支持的一些T-SQL语法。


考虑到这一点,您应该在SSMS中编写存储过程,对其进行测试,并在正确的时候从Access pass-through查询中调用它。如果需要更新数据(例如,将结果绑定到表单并编辑数据),请考虑使用视图。请注意,对于视图上的合法更新有一些限制。

请理解,传递查询正是这样做的。SQL Server不知道Access应用程序是关于什么的

Access和ODBC驱动程序都知道这一点,因此如果包含本地查询、表或函数,所有处理都将在Access中进行


传递查询只能处理服务器对象。提示:但是,这些可能包括由Access应用程序填写的临时表。

好的,谢谢您的帮助。我将尝试将自己读入存储过程。看来是对的。但是,是否有可能在sql server上保存查询,以便他了解后面的表?或者将查询保存到他可以读取的文件或其他东西中?为什么不直接进入Access应用程序并对其运行本地查询?传递查询需要什么?除非您使用的SQL Server方言无法转换为Access方言,或者需要Access app不需要的操作,否则可能不需要传递查询。因为在本地运行查询非常缓慢。你可以纠正我,但我认为这就是运行sql server的原因,所以它可以进行计算,只给出结果。我的程序现在运行得很慢,这就是为什么我尝试使用sql server的原因。。让它跑得更快。我还试图通过我通过access通过vba打开一个查询。我可以在access中打开它,它打开得更快,但是如果我尝试用vba打开这个查询,它说它不知道Gustav提到的对象“myquery”@FabWe,你可以创建一个表来存储access中的数据,然后可以在服务器存储过程中使用,这样您就可以轻松地推送数据,然后让SQL Server整体处理它。但是,这仍然可能很慢,因为当您插入几行时,Access必须逐个执行插入,这是知道插入是否成功的唯一可靠方法。如果这将成为一个问题,那么您可能会从如何推送大量数据的老方法中受益。