带有输入参数的动态sql模糊查询????

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有输入参数的动态sql模糊查询????相关的知识,希望对你有一定的参考价值。

如题:
我写了一个带有参数的动态sql,如下:
DECLARE @SQL NVARCHAR(1000)
DECLARE @PARMDEFINITION NVARCHAR(50)
DECLARE @VARVARIABLE VARCHAR(20)

SET @SQL= 'SELECT * FROM STUDENT WHERE NAME=@PERSONNAME'
SET @PARMDEFINITION='@PERSONNAME VARCHAR(50)'
SET @VARVARIABLE='李明'

EXEC SP_EXECUTESQL @SQL,@PARMDEFINITION,@PERSONNAME=@VARVARIABLE
但是这段sql语句不能进行模糊查询,现在我想查出NAME字段中所有姓李的学生的记录,该怎么写,高手指教。多谢了。新年快乐!!!!

把SET @SQL= 'SELECT * FROM STUDENT WHERE NAME=@PERSONNAME'
改成SET @SQL= 'SELECT * FROM STUDENT WHERE NAME like @PERSONNAME'

SET @VARVARIABLE='李明' 就是精确查
SET @VARVARIABLE='李%' 就是模糊查
参考技术A 楼上正解

把 SET @VARVARIABLE='李明' 换成..... SET @VARVARIABLE='李%'
参考技术B DECLARE @SQL NVARCHAR(1000)
DECLARE @PARMDEFINITION NVARCHAR(50)
DECLARE @VARVARIABLE VARCHAR(20)

SET @SQL= 'SELECT * FROM STUDENT WHERE NAME like ''%@PERSONNAME%'''
SET @PARMDEFINITION='@PERSONNAME VARCHAR(50)'
SET @VARVARIABLE='李明'

EXEC SP_EXECUTESQL @SQL,@PARMDEFINITION,@PERSONNAME=@VARVARIABLE
参考技术C 没有细看,随便说下:SET @VARVARIABLE='李明'-》SET @VARVARIABLE='李%'

多值模糊查询报表的制作

在数据查询系统中,经常会涉及到模糊查询和多值查询。对于模糊查询,我们可能都有所了解。就是根据用户在参数框中输入的关键字进行模糊匹配,这在SQL中是通过like条件实现的。而多值查询则大多是一次在参数框中输入2个以上关键词,以字符串组,整数组等形式进行参数传递,这在SQL中是通过in条件完成多值匹配的。

但是用户的需求往往是无止境的!最典型就是把这两种好使的方法结合起来,也就是两种查询的结合–在参数框中输入多个关键字,根据多个关键字进行模糊查询。比如,用户要根据产品名称进行多值模糊查询,当输入为“奶酪,糖”时,希望找出产品名称中含有奶酪或糖的产品列表,如下图所示:

技术分享图片

为了程序猿哥哥可以早日跟加班say goodbye , 不再做单身汪(咦?为什么我这么热心?),让我们一起了解一下润乾报表是怎么做到两种查询的完美结合的……

一共需要……1、2、3、4步:

1.定义主表模板:

技术分享图片

其中
1-3行设置行属性为报表头,其余行为数据区即可。

B3单元格表达式为:=macro1,目的是显示查询条件的拼接结果,以便校验最终数据是否正确。

A5单元格表达式为:=ds1.select(产品ID),目的是取数ds1结果集中所有的产品。

B5-F5 单元格表达式为:=ds1.字段名称,目的是根据前面的产品编号取出对应的产品信息

2.定义参数:

技术分享图片

其中
cpmc是普通参数,就是用户填入的查询值;

macro1是动态参数,根据cpmc拼接查询条件,值表达式为:if(cpmc == null or cpmc==””,”1=1″,”产品名称 like ‘%”+replace(@cpmc,”,”,”%’ or 产品名称 like ‘%”)+”%'”)。这里的动态参数,它不仅是用于在报表结果页面里面显示查询条件的拼接结果,而且也用于对sql进行数据筛选。

再详细说明一下:当cpmc为空时,返回1=1,表示查询全部数据,否则先用字符串替换函数replace()把参数中的”,”替换为”%’ or 产品名称 like ‘%”)+”%'”(注意其中的空格),替换后的结果再和前后字符串拼接得到最终的查询条件。例如当用户输入“奶酪,糖”,那么replace的替换结果就是“奶酪%’ or 产品名称 like ‘%糖%’,再和前后字符串拼接得到最终结果为 产品名称like ‘%奶酪%’ or产品名称 like ‘%糖%’。

3.定义数据集:

技术分享图片

这里在查询条件中用到了参数的特殊用法${参数名},相当于一个占位的效果,查询时会用前面定义的动态参数内容填充到这个位置。

:第2 – 3步的设置均在主表模板中添加。

4.定义参数模板:

技术分享图片

在报表工具设计区域右侧的属性栏中将B2的单元格web变量名设置为cpmc。

Bingo,多值模糊查询就这样完美地实现了!

回顾

我们来回顾一下其中遇到的问题和解决的技巧:

1、数据集SQL实现动态取数:

使用参数的${参数名}用法

2、 查询条件为空,查询全部:

使用参数1=1的用法

3、多值匹配:

以“,”分割多个查询关键字,拼接成多个 or 相连的like条件。

最后我们发现,其实这里仅仅用了润乾报表的参数特殊用法和SQL 查询条件的拼接是不是一不小心,又双叒叕get了新技能?这样下去,用不了多久是不是就可以拒绝加班,拒绝做单身汪了,窃喜吧。

快来加入润乾大家庭,get更多快速简便的报表制作方式吧。

以上是关于带有输入参数的动态sql模糊查询????的主要内容,如果未能解决你的问题,请参考以下文章

8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)

动态SQL中 实现条件参数 varchar类型的参数名称 以及模糊查询实现

jsp如何实现模糊查询

多值模糊查询报表的制作

java动态拼接sql语句并且执行时给sql语句的参数赋值

SQL的有关于参数的模糊查询