1

別のテーブルの値に基づいてテーブル名を動的に決定/参照する方法を見つけようとしています。

概念的には、これが私が欲しいものです。

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

SELECTTControlTables.ControlTablefromTControlTables WHERE TControlTables.MessageType in(SELECT TTestCaseParameter.MessageType FROM TTestCaseParameter」は、どのテーブルのElementNoをTestCase.ElementNoと比較するかを決定するクエリです。

4

1 に答える 1

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
于 2012-12-14T15:46:53.337 に答える