0

我们正在为用户构建一个搜索表单来搜索我们的数据库,该表单将包含多个字段,这些字段都是可选的。领域包括:

  1. 公司名称
  2. 公司代码
  3. 业务类型(服务或产品)
  4. 产品或服务
  5. 产品或服务子类型 --> 这将取决于 #4 中选择的内容

基本上,用户可以填写全部或部分字段并提交表格。为此,我们应该如何最好地处理 sql?最好使用动态 sql,在我们的网页中构建 where 子句,然后将其转发到 sql 存储过程以用作 where 子句?或者将所有值传递给存储过程并让它动态构建 where 子句是否更好。动态sql也是唯一的方法吗?我不确定使用 EXECUTE(@SQLStatement) 是否是一个好习惯。

4

2 回答 2

3

我过去所做的是,当不使用搜索选项时,传入 anull作为其值。然后在你的选择语句中你会做类似的事情

 WHERE i.companyname = COALESCE(@CompanyName,i.companyname) 
   AND i.companycode = COALESCE(@CompanyCode,i.companycode)

上面发生的情况是 if @CompanyNameisnull i.companyname将与自身进行比较,从而导致匹配。如果@CompanyName有一个值,它将i.companyname与该值进行比较。

我在一个有 15,000 行的数据库中使用了这种方法,有 15 个可选过滤器,迄今为止它的表现相对较好

有关COALESCE运算符的更多信息

于 2013-08-09T13:26:04.317 回答
2

动态 SQL 不是唯一的方法,如果您可以使用以下方法避免它会更好:http: //www.sommarskog.se/dyn-search.html

如果您无法从上述方法中获得性能并使用动态 SQL,请不要让网页构建 SQL 并执行它 - 您最终会被注入 SQL。还要避免传入文本字符串,因为清理它们非常困难。理想情况下,让网页传递仅是数字的参数(ID 等),以便您从中创建动态 SQL。

如果您决定使用动态 SQL,请务必阅读所有内容:http: //www.sommarskog.se/dynamic_sql.html

于 2013-08-09T13:23:37.740 回答