如何将本地访问表作为参数传递给SQL server?

如何将本地访问表作为参数传递给SQL server?,sql,sql-server,ms-access,parameter-passing,stored-functions,Sql,Sql Server,Ms Access,Parameter Passing,Stored Functions,我正在修改access 2010应用程序,以便它使用SQL server运行查询。数据在几年前已经传输到服务器,并用作链接表,但这证明有点慢,而且不是最优的。所以我试图把查询放到服务器上 我对简单的查询、视图等没有问题,。。。当需要简单的参数(日期、ID等)时,我使用存储函数 但现在我在应用程序中有了一个过程,它在数据库中选择一组ID,将它们存储在本地表中,对它们执行一系列操作(使用子报告进行报告,打印预览,打印,当用户确认所有打印内容都正常时,使用打印日期更新原始记录),如果所有操作都成功,则

我正在修改access 2010应用程序,以便它使用SQL server运行查询。数据在几年前已经传输到服务器,并用作链接表,但这证明有点慢,而且不是最优的。所以我试图把查询放到服务器上

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

但现在我在应用程序中有了一个过程,它在数据库中选择一组ID,将它们存储在本地表中,对它们执行一系列操作(使用子报告进行报告,打印预览,打印,当用户确认所有打印内容都正常时,使用打印日期更新原始记录),如果所有操作都成功,则清空本地表

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


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

我使用两种方法。对于多用户应用程序,这两种方法都非常有效。这里是基本的。你需要弄清楚细节

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

  • 检查这个问题是否对你有帮助。