我目前正在編寫基於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