2012-12-14 3 views
1

다른 테이블의 값을 기반으로 테이블 이름을 동적으로 결정/참조하는 방법을 찾으려고합니다.VB.Net의 SQL 쿼리에서 동적 테이블 이름

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.MessageType가에 (TTestCaseParameter로부터 TTestCaseParameter.MessageType을 선택 TControlTables 에서"어떤 테이블의 결정 쿼리입니다 :

개념 이것은 내가 원하는 것입니다 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

레무, 고마워요. 이것은 트릭을했다! –