我正在尝试使用 SQL、ASP.NET 和查询字符串参数执行一些简单的表过滤。我已经设置了我的项目,以便有一个带有“搜索”文本字段和“价格”文本字段的表单,并在提交表单时更新查询字符串参数,如下所示:
mydomain.com?search=test&price=100
SQL 语句应返回满足搜索条件的行,但如果其中一个为空,则另一个应仍带回数据。目前,当“搜索”和“价格”都有效时,返回正确的行,但如果其中一个为空,则不返回任何内容。
这是我的代码片段:
var search = Request["search"].IsEmpty() ? "" : Request["search"];
var price = Request["price"].IsEmpty() ? "" : Request["price"];
string sql = "SELECT * FROM Items WHERE ('%" + search + "%' is null OR item_name LIKE '%" + search + "%') AND ('%" + price + "%' is null OR item_price < " + price + ")";
我的理解是,如果“value is null”语句为真,那么 () 中的整个“AND”语句被设置为 null,因此将被忽略。如果它为假,则运行“OR..”语句。
为什么 SQL 语句没有按应有的方式工作?