VB.Net中SQL查询中的动态表名

时间:2012-12-14 10:04:43

标签: vb.net-2010 ms-access-2010

我试图找到一种方法来根据另一个表中的值动态确定/引用表名。

在概念中,这就是我想要的:

SELECT * FROM TTestCase 
WHERE TTestCase.ElementNo = (
    SELECT TControlTables.ControlTable from TControlTables 
WHERE TControlTables.MessageType in (
    SELECT TTestCaseParameter.MessageType 
    FROM TTestCaseParameter).ElementNo

来自TControlTables的“ SELECT TControlTables.ControlTable WHERE中的TControlTables.MessageType(SELECT TTestCaseParameter.MessageType FROM TTestCaseParameter “是确定哪个表的ElementNo应与TestCase.ElementNo进行比较的查询。

1 个答案:

答案 0 :(得分:0)

一些非常粗略的说明,你会在这里得到更好的代码http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand(v=vs.71).aspx。希望这会让你失望。

    Dim tablename As String
    Dim cn As New OleDbConnection("connection here")
    cn.Open()
    Dim query = "SELECT TControlTables.ControlTable " _
              & "FROM TControlTables " _
              & "WHERE TControlTables.MessageType in (  " _
              & "SELECT TTestCaseParameter.MessageType " _
              & "FROM TTestCaseParameter)"

    Dim dc = New OleDbCommand(query, cn)
    Dim tname As OleDb.OleDbDataReader
    tname = dc.ExecuteReader

    If tname.HasRows Then
        tname.Read()
        tablename = tname("ControlTable")
        tname.Close()
        query = "SELECT * FROM TTestCase WHERE TTestCase.ElementNo = ( " _
              & "SELECT ElementNo FROM [" & tablename & "])"
        dc.CommandText = query
        Dim rows As OleDb.OleDbDataReader
        rows = dc.ExecuteReader

    End If