【问题标题】:How to pass a local access table as parameter to SQL server?如何将本地访问表作为参数传递给 SQL 服务器?
【发布时间】:2021-03-14 13:21:30
【问题描述】:

我正在修改一个 access 2010 应用程序,以便它使用 SQL 服务器来运行它的查询。数据已在一段时间前传输到服务器,并用作链接表,但事实证明这有点慢且不是最佳的。所以我试图将查询放在服务器上。

我对简单的查询、视图等没有任何问题。当需要简单的参数(日期、ID、...)时,我会使用存储函数。

但是现在我在该应用程序中有一个进程,它在数据库中选择一堆 id,将它们存储在本地表中,对它们执行一堆操作(报告与子报告、打印预览、打印、更新当用户确认一切都打印OK时,带有打印日期的原始记录),如果所有操作都成功则清空本地表。

我不能简单地使用 SQL Server 表来存储 id,因为很多人同时使用该应用程序,并且同一张表在多个进程中使用;我不能使用临时表,因为一旦访问到下一个操作它们就会消失;而且我找不到将本地表用作服务器存储过程的参数的方法。基本上我被卡住了。

有人可以帮忙吗?有没有办法做到这一点(将一堆值作为表传递给服务器存储函数)?或者另一个可以达到相同结果的进程(在服务器上有一个特定于当前用户的表,或者一个通用表,并以某种方式识别属于当前用户的行,或其他任何东西)?

【问题讨论】:

标签: sql sql-server ms-access parameter-passing stored-functions


【解决方案1】:

我使用了两种方法。两者都适用于多用户应用程序。这是基础知识。你需要弄清楚细节。

  1. 在 SQL Server 中使用标识列 SessID(INT NOT NULL)创建表 (tblSessions)。 在 Access 中创建一个函数以生成和检索新的 SessID。 创建具有 2 列 SessID、YourID 的第二个 SS 表 tblWork。添加适当的索引和键。将此表链接到您的 Access 应用程序。然后,不要将查询的 ID 插入 Access 临时表,而是将它们与新的 SessID 一起插入 tblWork。您现在可以将 tblWork 连接到其他 SS 表/视图,以用作您报告的数据源。请务必将您生成的 SessID 添加到 where 子句中。
  2. 创建一个存储过程来为您的报告生成数据。包括一个参数@YourIDList VARCHAR(MAX)。通过直通查询调用 proc,并将您的 ID 列表作为逗号(或任何您喜欢的)分隔的字符串传递给 @YourIDList。在 proc 中,将 @YourIDList 拆分为一个临时表。 SS2016+ 有一个 STRING_SPLIT 函数。对于旧版本,请自行推出。有很多可用的例子。然后将临时表连接到生成输出所需的其他表。将 PT 查询用作您的报告数据源,或将其转储到 Access 临时表中并将其用作您的报告数据源。

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 2020-05-07
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多