我目前正在编写基于Jet数据库后端的基于VBA的Excel加载项(我使用Office 2003套件 - 问题会无论如何,与最新版本的Office一样)。Jet引擎(访问):将值列表传递给存储过程
在我的应用程序的初始化过程中,我创建了在文本文件中定义的存储过程。这些程序在需要时由我的应用程序调用。
让我举一个简单的例子来描述我的问题:假设我的应用程序允许最终用户选择他们想要的详细信息的订单标识符。下面是表的定义:
表tblOrders:订单LONG,订购日期DATE,(其它领域)
最终用户可以选择一个或多个OrderIDs,在表单中显示的 - 他/她刚必须勾选相关OrderID的复选框,以了解其详细信息(OrderDate等)。
SELECT * FROM tblOrders WHERE OrderID = 1 OR OrderID = 2 OR OrderID = 3
:
因为我事先不知道有多少的OrderID他/她会选择做什么,我可以动态地通过级联基于表单上做出的选择WHERE子句创建的VBA代码的SQL查询
,或者更简单,使用IN关键字:
SELECT * FROM tblOrders WHERE OrderID IN (1,2,3)
现在,如果我把这个简单的查询到存储过程中,这样我可以动态传递OrderIDs我想要显示的列表中,我应该怎么办?我已经尝试过的东西,如:
CREATE PROCEDURE spTest (@OrderList varchar) AS
SELECT * FROM tblOrders WHERE OrderID IN (@OrderList)
但是,这并不工作(我期待的是),因为@OrderList
被解释为一个字符串(如“1,2,3”),而不是只要值的列表。 (我改编自这里的代码:Passing a list/array to SQL Server stored procedure)
我想尽量避免通过纯VBA代码处理这个问题(即动态地将值列表分配给在我的应用程序中硬编码的查询)。我会理解,如果这是不可能的。
任何线索?
只是一个额外的精度:我已经看了以下线索“将一组ID传递给存储过程”以及这里给出的解释:“http://www.sommarskog.se/arrays-in-sql.html”,但这些仅适用于SQL Server。 – VBAFred 2011-04-03 13:38:29