首页 文章

SQL视图与MS Access查询

提问于
浏览
0

我使用SQL Server迁移向导将所有表传输到后端MS-SQL Server . 表单,报表和查询等其他对象仍在我的Access前端 . 我正在考虑转换包含多个表和连接语句的复杂查询来传递查询,但我的一些讨论帖建议在SQL Server中存储查询而不是使用传递查询或将查询保留在MS Access中 .

为什么在SQL Server上查询是一个好主意?它真的比使用传递查询更好吗?

1 回答

  • 3

    使用传递查询(PT)或视图意味着在两种情况下SQL都是服务器端 . 因此,使用PT查询,视图和从Access调用存储过程之间的性能差异并不大 .

    PT查询的主要缺点是它们是只读的 . 因此VBA代码和表单无法根据PT查询更新内容 .

    但是视图是可更新的,性能是相同的 .

    如果表单直接通过表链接绑定到sql server上的表(例如100万行),那么这样的设置就好了如果您在启动该表单时始终使用标准VBA where子句打开表单 .

    因为访问表单基于一个表(和一个要编辑的记录),所以在这种情况下,通过使用PT查询,视图,存储过程或只是标准链接表到sql server,你获得零性能(没有性能优势) .

    但是在你的问题中,你提到了带有多个表/连接等的“复杂”sql .

    在这种情况下,PT查询适用于报告,并且可能某种形式“显示”用于搜索的数据等 . 然而,用于编辑的表格必须是视图或链接表 . 所述的PT查询是只读的 .

    由于99%的表单都基于一个表,然后继续使用链接表到sql server将执行得很好(只需记住上面的规则,总是将这些表单打开到一个记录) .

    因此,PT查询和视图实际上是相同的 - 它们都运行服务器端 . 唯一真正的区别是你不能存储PT查询服务器端,但你可以查看 . 因此,“视图”实际上非常类似于访问中的本地保存查询 - 与PT =只读相比,它是读/写 .

    因此,对于报告,您可以轻松设置pt查询,但对于参数和过滤,您会发现视图是更好的选择 . (因为如果您有该报告的现有VBA过滤器代码 - 它可以保持不变,并且只有满足过滤器的记录(where子句 - 而不是实际的报告过滤器)才会被遵守 .

    请注意,如果表单或报表基于一个表(链接表),则Access的工作相当不错 . 在这种情况下,Access仅会在您打开报表或表单时提取符合您提供的“where”子句的记录 .

    这意味着对于基于Access中的复杂查询的报表,您将查询转换为sql server侧视图,现在将报表链接到该视图以代替查询 . 这很好,因为如前所述,您的过滤器将像以前一样工作,并且您不会经历设置PT查询的所有麻烦,这往往比创建该视图更麻烦 .

    因此,PT查询不比视图更好也更快,但视图有几个优点 . 它往往意味着Access客户端没有代码更改,并且如上所述,视图是读/写而不是PT查询是只读的 .

    所以PT和视图都运行服务器端,但为了便于开发和访问端代码的最少更改,那么视图往往是一个更好的选择,此外,如上所述,PT查询不是存储在服务器端,但肯定将PT查询发送到服务器时运行服务器端 .

相关问题