4

我正在解决一个我确定有人以前见过的问题,但我在网上发现的只是如何不去做。

假表示例和动态搜索。(由于我的评分低,我不能发布图片。我知道我应该感到羞耻!!)

单击添加按钮会自动创建另一行以添加更多标准选择。

(注意:我的表肯定更复杂)

现在到我的问题,我以为我知道如何处理这个任务的 SQL,但我真的不知道。我应该做的唯一示例并不适用于这种动态表查询。这些示例无法根据用户的喜好创建尽可能多的搜索过滤器(或者我的理解可能有所欠缺)。

如果我上传的图片质量不够好或者我没有提供足够的信息,请告诉我。

我真的很好奇这种情况下的最佳实践。先感谢您。

4

4 回答 4

1

我有一个类似的问题。您可以将动态 sql 与sp_executesql存储过程一起使用,您实际上将 select 语句构建为字符串并将其传入。

或者您可以编写一个类似于我创建的存储过程,其中您在 where 子句中具有所有条件,但忽略 NULL 值。

这是我为我的场景提出的存储过程: 如何在使用未确定数量的参数时避免动态 SQL?

我编写的参数化存储过程的优点是我能够避免与动态 SQL 相关的 SQL 注入风险。

于 2010-05-06T21:43:42.910 回答
0

两个主要选择:

Linq to Sql 允许您编写查询、添加查询、再次添加查询,并且在您迭代结果之前它不会真正编译和执行 SQL 语句。

或者您可以使用动态 SQL。让这件事变得简单的诀窍是“WHERE (1=1)”技术,但您必须小心使用参数(以避免 SQL 注入攻击)并仔细构建您的 sql 语句。

于 2010-05-06T21:31:10.257 回答
0

查看SqlBuilder,一个用于动态 SQL 的实用程序。

于 2010-05-06T21:35:42.133 回答
0

原帖: 写一个多条件搜索的sql

select * from thetable
where (@name='' or [name]=@name) and (@age=0 or age=@age)

但是,上述查询会强制进行表扫描。为了获得更好的性能和更复杂的场景(我猜您在原始帖子中简化了问题),请考虑使用动态 sql。顺便说一句,Linq to SQL 可以帮助您非常轻松地构建动态 SQL,如下所示:

IQueryable<Person> persons = db.Persons;
if (!string.IsNullOrEmpty(name)) persons = persons.Where(p=>p.Name==name);
if (age != 0) persons = persons.Where(p=>p.Age=age);
于 2010-05-06T21:36:15.780 回答