如何在这种情况下编写select语句?

时间:2012-08-01 12:50:33

标签: sql-server-2008 select

我有一个查询,我用来过滤网格

     SELECT * FROM Resources
              WHERE ResourceName  ='" + ResourceName + "' 
              AND  Status = '" + status + "' "

我的网格看起来像这样

  ResourceID|ResourceName|Status

我在下拉列表中添加了ResorceName和Status以过滤网格现在我的问题是,在这个select语句中,如果任何参数为空,则数据未绑定到网格,但如果我传递了两个参数,则过滤网格并从网格中提供所需的行或过滤的行...任何人都可以告诉我如果任何参数为null,我如何编写select语句。

3 个答案:

答案 0 :(得分:1)

在下面的帖子中查看所有查询

Catch All Examples

答案 1 :(得分:1)

在快速解决问题方面,这样的事情会起作用......

Select * From Resources Where (ResourceName = '"+ ResourceName + "' OR ResourceName IS NULL) AND (Status = '" + Status +"' OR Status IS NULL)

然而,这不是一个可接受的代码段,因为它易受SQL注入攻击。实质上,假设传入的ResourceName是

'; Drop Table Resources; --

你可能不需要我告诉你它是做什么的。

我的建议是始终使用.Net中的SQLCommand对象 - 在其他语言中也称为“Prepared Statements”。它可以防止这种诡计......

答案 2 :(得分:0)

SELECT * FROM Resources
WHERE (ResourceName  = CASE WHEN '" + ResourceName + "' IS NULL THEN ResourceName  ELSE '" + ResourceName + "' END) //do same for other parameter