2012-12-14 71 views
1

SQL查詢動態表名我試圖找到一種方式來動態確定/參考基於另一個表中的值的表名。在VB.Net

在概念上,這是我想要的:

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

的 「SELECT TControlTables.ControlTable從TControlTables WHERE TControlTables.MessageType中(選擇TTestCaseParameter.MessageType FROM TTestCaseParameter」 是決定其表的查詢ElementNo應與TestCase.ElementNo進行比較

+0

爲什麼你不希望動態編寫sql的任何原因? – Fionnuala

+0

嗨Remou,我要動態寫它,我只是不知道怎麼辦。 –

回答

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 
+0

Remou,非常感謝你。這個竅門! –