2017-09-13 135 views
0

我在VB.NET for SQL Server中执行此操作,但我认为这是一个通用的SQL问题。SQL WHERE子句:根据值获取所有行/只匹配行

我建立一个SQL查询,我想避免这样做:

Dim SQL As String = "SELECT * FROM Table" 
If Not IsDbNull(Value) Then 
    SQL &= " WHERE Value = " & Value 
End If 

有没有写一个WHERE子句,这样,如果一个值为NULL,则查询返回的所有行的方式否则只返回与提供的值相匹配的行。

例如:

如果该值是NULL,则结果集将是:

ID Value City 
1 1  New York 
2 1  London 
3 2  Paris 
4 4  Mumbai 

如果该值是2,则结果集将是:

ID Value City 
3 2  Paris 

我可以编写两个单独的查询或按上述方式编写查询,但我想知道是否有更好的方法?

回答

0

您应该使用参数查询。一种方法是:

WHERE Value = ? OR ? IS NULL 

我应该注意,结果查询可能不会使用索引。因此,从性能角度来看,两个单独的查询可能会更好。

+0

我同意参数和例子被简化以节省空间。 –

+0

OMG ...自80年代中期以来,我一直在写SQL,我无法相信我错过了一个简单的答案。谢谢戈登。 –