【发布时间】:2018-04-05 11:44:50
【问题描述】:
我正在 Microsoft Access 中处理一个非常复杂的旧 ADP 项目,该项目连接到 2008 SQL Server 后端。一个常见的使用场景是数据表视图中包含可编辑记录集的表单。
大多数数据库使用的方法是加载表单,然后使用表单参数在 VBA 中动态构建 SQL,并将 SQL 应用为表单的RecordSource。许多查询都非常复杂,因此这会导致代码非常丑陋和维护噩梦。
对于只读记录集,我已将动态 sql 转换为参数化存储过程,效果很好。漂亮干净,易于维护。
但对于可编辑的记录集,我正在尝试确定最佳方法:
1.动态 SQL - 如上所述,我真的很想避免这种方法。
2。 SQL 视图 - 这里的挑战是一些表非常大,所以如果我尝试加载视图然后在表单上过滤它,它必须从 SQL 服务器中提取整个记录集,即使我只需要少量的行。 (负面性能和 IO 影响。)
3。使用 context_info - 这听起来很有趣,但听起来不像是基于此处讨论的推荐方法:Create parameterized VIEW in SQL Server 2008 如果我针对 SQL Server 2016 进行开发,我可能会更多地研究 SESSION_CONTEXT。
4.带视图的参数表 - 这是我倾向于的想法。我将在 SQL 中创建一个Parameters 表,并使用会话 ID 设置参数值(作为键/值对)。然后,视图将根据参数表中的当前值进行过滤。这将允许我使用视图作为我的RecordSource 来支持编辑,但过滤将在 SQL Server 端进行。
参数表确实是该项目的最佳方法,还是有另一种方法可以访问在服务器端过滤的参数化读写记录集?
【问题讨论】:
-
这个问题对我来说似乎很广泛且基于观点。为什么不能使用带参数的简单传递查询?如果可维护性很重要,那就更依赖于您的专业知识和准确的设置。
-
@ErikvonAsmuth - 这是一个 ADP 项目,不支持直通查询。您正在 SQL 端直接使用视图和存储过程。
-
我不是指 DAO 传递查询意义上的传递查询。只是一个设置为参数化查询的 ADODB 记录集。
-
@ErikvonAsmuth - 我不确定我是否完全理解“参数化查询”的含义......如果我使用 SP 作为表单上的记录集,则数据不可编辑。如果我使用视图,我无法设置参数。
-
只需使用带参数的静态 SQL。您可以将 SQL 保存在模块中的字符串中,或者几乎其他任何地方。或者,如果您更喜欢在 SQL Server 中管理查询,您可以使用 TVF 创建可更新的记录集。
标签: sql sql-server-2008 ms-access