【问题标题】:Can I create a query to store my procedure to apply on different tables with same structure in Access/SQL?我可以创建一个查询来存储我的过程以应用于 Access/SQL 中具有相同结构的不同表吗?
【发布时间】:2018-08-07 14:30:01
【问题描述】:

我知道在 SQL 中,您可以存储过程并保存查询以在同一张表上进一步使用。

例如,如果您创建此查询:

CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)
AS
SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode
GO;

那么你可以这样做:

EXEC SelectAllCustomers City = "London", PostalCode = "WA1 1DP";

EXEC SelectAllCustomers City = "Beijing", PostalCode = "100010";

我还可以通过将表名设置为参数来保存特定过程并应用于不同的表吗?

例如,在管理月度历史报告时会非常有帮助,因为对于每个月,您都必须重复相同的数据分析过程。

【问题讨论】:

  • 据我所知,没有。使用 VBA。为什么你有多个具有相同结构的表?
  • 正如我所说,每个月度报告看起来都一样,只是数据不同。
  • 这并不能解释为什么表引用必须是动态的。为什么你有多个具有相同结构的表而不是只有一个表?
  • 你说得很好。谢谢你,我会尝试合并我的表格。

标签: sql ms-access ms-access-2016


【解决方案1】:

您的标题有点令人困惑,因为您说的是“不同”的表格,但您的所有示例都适用于一张表格(因此在这里非常混乱)。

至于提供参数?是的,这很常见,但不需要某些存储过程。

实现此目的的最佳方法是使用 Access 的“内置”功能“即时”提供参数。这样一来,您就不必提前知道、关心或“计划”。

因此,您可以为报告提供“动态”参数。只需将报告基于原始表(或查询)即可。

然后,您可以使用 openReport 的“where”子句为报表提供参数。

例如:

Docmd.OpenReport "rptSales",acViewPreview,,"City = 'Edmonton'"

所以上面会打开报告并限制在一个城市。请注意,访问是智能的,如果您的后端是网络上的访问后端或 sql server 后端,那么只有满足您条件的记录才会被拉下网络管道...

因此,只需使用 openReport 的“where”子句即可。它是任何有效的 sql “where”子句——即使是子查询也可以在该 were 子句中使用。无需使用存储过程,使用“已知”参数创建存储过程。无论如何,这样做您的性能将为零 - 因此,请使用 Access 内置的强大“where”子句来进行此类过滤或根据某些提供的标准限制记录。

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2021-06-07
    • 2021-11-06
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多