`
1000copy
  • 浏览: 74368 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

改善sql字符串的可读性(2) - 多个可选条件拼接的优化

阅读更多

 

报表众多的系统,“多个可选条件拼接”就会大量存在。因为程序员需要根据条件录入框的的值是否存在来决定是否拼接这个对应条件。有点抽象,还是看代码。

 

string sql =

@"select n.vchcode,n.summary,n.Comment,e.fullname efullname                  

      from dlyndx n left join employee e on n.etypeid = e.id

   where n.draft=0 ";

if (queryParams.vchCode != "")

{

  sql += " and n.number like @number";

  dbHelper.AddParameter("@number", AppUtils.GetLikeStr(queryParams.vchCode));

}

if (queryParams.comment != "")

{

  sql += " and n.comment like @comment";

dbHelper.AddParameter("@comment", AppUtils.GetLikeStr(queryParams.comment));

}

 

这个sql的最大问题是,sql的条件部分和sql主题不在一起,并且需要根据外部条件(这里是单据号,备注等查询字段是否有值)来决定是否拼接sql。改进的方法当然是把sql都放在一块代码内,参数都放到以外一块内代码内。

 

看看新的代码:

string sql = @"

select n.vchcode,n.summary,n.Comment,e.fullname efullname                  

    from dlyndx n left join employee e on n.etypeid = e.id

  where n.draft=0

  and (@enableNumber and n.number like @number)

    and (@enableComment and and n.comment like @comment)

";

dbHelper.AddParameter("@enableNumber", queryParams.vchCode != "");

dbHelper.AddParameter("@number", AppUtils.GetLikeStr(queryParams.vchCode));

dbHelper.AddParameter("@enableComment",queryParams.comment != "");

dbHelper.AddParameter("@comment", AppUtils.GetLikeStr(queryParams.comment));

 

代码混合是问题的温床,这段代码做到了sql和参数的分离,sql和代码不会胶合在一起。容易阅读。


1
0
分享到:
评论

相关推荐

    存储过程拼接字符串

    当我们需要在存储过程中拼接字符串时,通常是为了解决动态SQL构造或者生成报告等需求。在本文中,我们将深入探讨如何在SQL中进行字符串拼接。 一、SQL Server中的字符串拼接 1. 使用`+`运算符 在SQL Server中,最...

    将SQL字符串按不同开发语言格式化

    在实际应用中,SQL字符串的格式化不仅关乎美观,更是直接影响到代码的可读性和维护性。尤其是在大型项目中,一致的代码风格对于团队协作至关重要。因此,理解并掌握如何使用这样的工具,是每个IT专业人员提升专业...

    Sqlobj一个JavaScript工具用于通过一个对象构建SQL字符串

    这个工具通过将查询条件组织成一个JavaScript对象,然后将其转换为有效的SQL字符串,从而避免了手动编写复杂的SQL语句时可能出现的错误。在JavaScript开发中,尤其是在处理动态数据或需要频繁构建SQL查询的情况下,...

    MyBatis 动态拼接Sql字符串的问题

    在处理SQL时,动态SQL功能是MyBatis的一大亮点,它有效地解决了SQL字符串拼接的问题,避免了手动拼接带来的错误和复杂性。 1. **If标签**:MyBatis的`<if>`标签用于条件判断,它允许我们在SQL语句中根据Java对象的...

    SQL SERVER2012中新增函数之字符串函数CONCAT详解

    在SQL Server 2012中,引入了一个新的字符串函数——CONCAT,它的主要功能是方便地连接多个字符串。在CONCAT函数出现之前,我们通常使用 "+" 运算符来连接字符串,但这种方法存在一个问题,即如果其中任何一个字符串...

    sql的封装,不需要使用StringBuffer进行字符串拼接

    本话题将深入探讨如何避免使用`StringBuffer`进行SQL字符串拼接,以及更推荐的SQL封装技术。 首先,`StringBuffer`或`StringBuilder`在Java中用于构建可变字符串,它们在循环中拼接字符串时比直接使用`+`操作符更...

    SqlUtils工具类,Sql IN 条件拼接工具类

    这些方法通常会结合使用`StringBuilder`来构造SQL字符串,同时进行必要的边界条件检查,确保在空值或空集合时返回合理的SQL语句。 例如,如果要根据一个可能为空的`ids`列表构建一个`IN`查询,你可以这样做: ```...

    mysql拼接字符串函数.zip

    CONCAT() 是最常用的字符串拼接函数,它可以接收一个或多个字符串作为参数,并返回它们连接后的结果。例如: ```sql SELECT CONCAT('Hello', ' ', 'World'); ``` 这将返回 "Hello World"。如果参数中包含NULL值,...

    T-SQL功能:在所有字符之间添加空格

    这种方法可以用于创建更易读的输出,比如在显示数据库记录时,或者在进行字符串拼接时增加可读性。 基于给定的标签,我们可以推断这个知识点适用于多种版本的SQL Server,包括SQL Server 2005、2008、2008 R2等。这...

    自动拼接sql

    它允许用户将多个参数合并成一个完整的SQL字符串,以便在执行时通过`EXEC`函数使用。 在SQL中,`EXEC`命令常用来动态执行存储过程或T-SQL语句。这是因为某些操作可能需要根据条件或用户输入来动态构造SQL语句,而...

    SQL语句拼接工具,简化SQL语句拼写代码

    随着数据库应用的日益复杂,编写和管理SQL语句变得越来越繁琐,尤其是在处理动态查询时,需要根据用户输入或业务条件拼接SQL字符串。为了解决这个问题,出现了SQL语句拼接工具,如描述中提到的,它能帮助简化SQL语句...

    hibernate hql where语句拼接工具类

    这些方法接受一个当前的HQL查询字符串和一个新的条件,然后根据查询的现有结构适当地添加WHERE或AND/OR关键字,并附加新的条件。这在处理动态查询条件,如根据用户输入过滤数据时非常有用。 使用此类时,你可以像...

    Java 使用注解拼接SQL语句

    这在处理复杂查询或动态过滤时特别有用,避免了大量硬编码的字符串拼接。 4. **性能与安全性**: 动态SQL可以提高代码的灵活性,但也有性能考虑。因为每次方法调用都可能导致不同的SQL生成,这可能会影响数据库的...

    CPQuery 解决拼接SQL的新方法

    在传统的SQL拼接中,将变量直接插入SQL字符串中会带来SQL注入的风险,这不仅对数据库安全构成威胁,还可能导致性能下降,因为每次执行的SQL都需要经过解析和优化。此外,混合在代码中的SQL语句使得代码可读性和可...

    sqlserver中根据字符分割字符串的最好的写法分享

    3. EXEC:最后,我们使用EXEC函数执行动态生成的SQL字符串@tsql。这将运行拼接好的SQL命令,将原本分隔的字符串转换为多行输出。 以下是一个完整的示例代码: ```sql DECLARE @sql VARCHAR(2000), @tsql NVARCHAR...

    JSTL 字符串处理函数

    **JSTL 字符串处理函数详解** JavaServer Pages Standard Tag Library(JSTL)是Java Web开发中常用的一组标准标签库,它提供了一系列标签用于简化页面逻辑,包括核心标签、XML标签、SQL标签以及函数标签。在这些...

    Go-Go-SQLBuilder是一个用于创建SQL语句的工具函数库

    Go-SQLBuilder解决了这个问题,它允许开发者使用结构化的方式构建SQL,避免了字符串拼接带来的问题,降低了SQL注入的风险。 Go-SQLBuilder的核心功能包括: 1. **链式操作**:通过一系列的链式调用,如`Select()`,...

    mysql字符串拼接并设置null值的实例方法

    这个函数允许你合并一个或多个字符串。例如,如果你有两个字段`last_name`和`first_name`,你可以像下面这样拼接它们: ```sql SELECT CONCAT(last_name, first_name) AS 姓名 FROM employees; ``` 这将返回一个新...

    DSL-SQL源码分析

    - 在源码层面,这通常涉及到解析器(parser)和编译器(compiler)的设计,解析器将DSL表达转化为内部数据结构,编译器再将这个数据结构转换为实际的SQL字符串。 2. **解析器实现**: - 解析器可能使用词法分析...

    常用sql 语句优化

    - **SQL字符串**:SQL字符串不可包含缩进,即每一行字符串不应以空格开头。 #### 换行规则 1. **关键字**:`SELECT`, `FROM`, `WHERE`, `ORDER BY`, `GROUP BY`等关键字必须独立成行。 2. **子句内容**: - 如果...

Global site tag (gtag.js) - Google Analytics