我有一个参数化查询GET_CUSTOMER:
SELECT * FROM Customer WHERE id = [customer_id]
我想从另一个查询中调用此查询并向其传递一个参数:
SELECT * FROM GET_CUSTOMER(123)
请注意上面的代码无效,它是为了让您了解我正在尝试做什么。是否可以在MS Access中执行此操作?
更新1:
我发布的查询就是例如。实际的查询要复杂得多。我知道我可以使用表连接,但在我的特定情况下,如果我可以在其他查询(也参数化)中运行参数化查询会更容易。我无法使用访问表单,因为我正在使用.NET应用程序访问。
答案 0 :(得分:2)
这就是我在https://stackoverflow.com/a/24677391/303463的帮助下最终解决这个问题的方法。事实证明,Access在所有查询中共享参数,因此无需专门将参数从一个查询传递到另一个查询。
查询1:
SELECT * FROM Customer WHERE ID > [param1] AND ID < [param2]
QUERY2:
SELECT * FROM Query1
VB.NET代码:
Dim ConnString As String = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=Database.mdb"
Dim SqlString As String = "Query2"
Using Conn As New OleDbConnection(ConnString)
Using Cmd As New OleDbCommand(SqlString, Conn)
Cmd.CommandType = CommandType.StoredProcedure
Cmd.Parameters.AddWithValue("param1", "1")
Cmd.Parameters.AddWithValue("param2", "3")
Conn.Open()
Using reader As OleDbDataReader = Cmd.ExecuteReader()
While reader.Read()
Console.WriteLine(reader("ID"))
End While
End Using
End Using
End Using
答案 1 :(得分:-1)
您可以动态构建SQL。
MyID = prompt or get from user some ID
strSQl = "Select * from tblCustomer where ID in " & _
"(select * from tblTestCustomers where id = " & MyID
因此,您可以嵌套或使用一个查询的来源将ID列表提供给第二个查询。