加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 分页模糊查询

发布时间:2020-12-12 14:17:30 所属栏目:MsSql教程 来源:网络整理
导读:?? 积少成多 ----? 仅以此致敬和我一样在慢慢前进的人儿 问题 : 在sqlserver 进行模糊查询,出现问题 最初使用“concat”,进行拼串操作,如下所示: select id = " queryCount " resultType= " int " select count(* ) from t_user where if test = " query

??                                积少成多 ----? 仅以此致敬和我一样在慢慢前进的人儿

问题: 在sqlserver 进行模糊查询,出现问题

最初使用“concat”,进行拼串操作,如下所示:
<select id = "queryCount" resultType="int" > select count(*) from t_user <where> <if test = "queryText!= null"> loginacct like concat("%",#{queryText},"%) </if> </where> </select>

运行结果concat” 是不是可以识别的函数,不是内置函数

查询结果: “concat”方法进行拼串,只适用于mysql 和 oracle,不适用于sqlserver,这个函数是用来连接字符串,    ? ? ? ? ? ? ? ? ? ? ? ? sqlserver中没有,可以使用 + 连接符号搞定

解决方案:使用传统的拼串操作,“like”操作尝试:

尝试一: 使用占位符(#{})
<select id = "queryCount" resultType="int" > select count(*) from t_user <where> <if test = "queryText!= null"> loginacct like %#{queryText}% </if> </where> </select>

运行结果:
Preparing: select count(*) from t_user WHERE loginacct like ‘%?%‘?

? com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。

? 查询结果:在使用占位符进行模糊查询时不能把问号放在引号里面,问号的位置必须跟字段名同级;(不理解

? 解决方案:like ‘%‘ + #{quertText} + ‘%’(成功运行)

<select id = "queryCount" resultType="int" >
select count(*)
from t_user
<where>
<if test = "queryText!= null"> loginacct like ‘%‘ + #{queryText}+ ‘%‘ </if>
</where>
</select>

?

尝试二: 使用EL表达式(成功运行)
 <select id = "queryCount" resultType="int" >
        select count(*)
        from t_user
        <where>
            <if test = "queryText!= null"> loginacct like %${queryText}% </if>
        </where>
   </select>
存在问题:使用 ${}无法防止sql注入? ?

?

? 结论:sqlserver 模糊查询中, 优先使用 like ‘%‘ + #{quertText} + ‘%’进行操作

?

sqlserver 分页模糊查询例码:(供自己忘记后查看)

<select id = "queryList" resultType="T_user">
    select top ${pagesize}*
    from t_user
    <where>
        <if test = "queryText!=null">loginacct like % + #{queryText}+ %
            and id not in
            (select top ${startIndex} id from  t_user order by id)
            order by id
        </if>
    </where>
    <where>
        <if test = "queryText==null">
            id not in
            (select top ${startIndex} id from  t_user order by id)
            order by id
        </if>
    </where>
</select>

注意事项: 单个或者是多个条件查询,都是只有一个“where” 条件之间使用 “and” 连接

(编辑:李大同)

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

    推荐文章
      热点阅读