2011-02-23 106 views
0

我有一個查詢,我必須運行該查詢,這需要我根據另一個表中的字段值(我已經獲得)從表中獲取行。SQL Server查詢組合

我現在有這樣做(簡化)。

cmd.commandtext = "SELECT * FROM TableB WHERE FieldC = '" & TableA.FieldF & "'" 
cmdReader = cmd.executereader() 
If cmdReader.HasRows Then 
    Do something 
Else 
    cmdReader.close() 
    cmd.commandtext = "SELECT * FROM TableB WHERE FieldC = 'Generic'" 
    cmdReader = cmd.executereader() 
    If cmdReader.HasRows Then 
     Do something 
    Else 
     Do something 
    End If 
End If 

有沒有一種方法可以將這兩個查詢結合起來,以便我可以得到一個或另一個?

讓我知道如果您需要任何更多的信息,不知道我已經正確解釋了這一點。

+1

您需要閱讀[SQL注入攻擊](http://en.wikipedia.org/wiki/SQL_injection)。 – Oded 2011-02-23 09:50:38

+0

你只想返回沒有匹配FieldF值的「通用」FieldC值嗎? – 2011-02-23 09:58:07

+0

是的,我正在尋找。我上面所做的,但我只是想知道是否有可能在SQL中而不是在VB.NET – Nalum 2011-02-23 10:03:56

回答

2

嘗試:

WHERE FieldC = '" & TableA.FieldF & "' OR FieldC = 'Generic' 

或者

WHERE FieldC IN ('" & TableA.FieldF & "', 'Generic') 

更妙的是,使用參數:

WHERE FieldC IN (@FieldF, 'Generic') 
... 
cmd.Parameters.Add("@FieldF", TableA.FieldF); 

編輯:要在一個查詢中只選擇一個組行,你可以:

SELECT * 
FROM TableB 
WHERE FieldC = @FieldF 
UNION ALL 
SELECT * 
FROM TableB 
WHERE NOT EXISTS (SELECT * FROM TableB WHERE FieldC = @FieldF) 
     AND FieldC = 'Generic' 
+1

**絕對總是**使用參數... – 2011-02-23 09:53:30

+0

這將不返回所有行的' TableA.FieldF'和'Generic'值?我想要返回一個或另一個。 – Nalum 2011-02-23 09:58:46

+0

@Nalum:好的,這在SQL中並不容易。一種方法是「聯合」,添加到答案 – Andomar 2011-02-23 10:08:03