加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.net – 针对数据库表实现具有多个可选参数的搜索功能

发布时间:2021-03-14 21:44:15 所属栏目:MsSql教程 来源:网络整理
导读:我想检查是否有一个首选的设计模式来实现具有针对数据库表的多个可选参数的搜索功能,其中对数据库的访问应仅通过存储过程. 目标平台是.Net与SQL 2005,2008后端,但我认为这是非常普遍的问题. 例如,我们有客户表,我们希望为UI提供不同参数的搜索功能,例如客

我想检查是否有一个首选的设计模式来实现具有针对数据库表的多个可选参数的搜索功能,其中对数据库的访问应仅通过存储过程.

目标平台是.Net与SQL 2005,2008后端,但我认为这是非常普遍的问题.

例如,我们有客户表,我们希望为UI提供不同参数的搜索功能,例如客户类型,客户状态,客户邮编等,所有这些都是可选的,可以任意组合进行选择.换句话说,用户可以仅按customerType或按customerType,customerZIp或任何其他可能的组合进行搜索.
有几种可用的设计方法,但它们都有一些缺点,我想问一下它们中是否有一个首选设计,或者是否有另一种方法.

>根据来自UI的搜索请求,在业务层中动态生成sql where子句sql语句,并将其作为参数传递给存储过程.像@Where =’,其中CustomerZip = 222221′
在存储过程内部生成动态sql语句并使用sp_executesql执行它.
缺点:动态sql,sql注入
>实现具有多个输入参数的存储过程,表示来自UI的搜索字段,并使用以下构造仅为where语句中的请求字段选择记录.

哪里

(CustomerType = @CustomerType OR @CustomerType is null )

AND      (CustomerZip = @CustomerZip OR @CustomerZip is null )

AND   …………………………………………

缺点:sql可能存在性能问题.

3.为每个搜索参数组合实现单独的存储过程.
缺点:随着搜索参数的增加,重复的代码,存储过程的数量会迅速增加.

解决方法

这是描述如何在SQL: Dynamic Search Conditions in T-SQL by Erland Sommarskog中执行此操作的微妙性能影响的最佳文章.它涵盖了每个方法,并详细介绍了每种方法的PRO和Cons.

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读