2011-02-23 104 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