多个查询条件的怎么实现
要在一个系统中实现查询功能,系统界面上有多个查询条件需要用户输入,但允许用户只输入其中部分条件。因此查询需要根据用户输入的那几项进行,这样的查询怎么实现的效率高。能不能用存储过程来实现? 问题点数:50、回复次数:9Top
1 楼engine198473(我喜欢偷偷的看她偷偷的看我)回复于 2006-03-02 11:49:00 得分 0
提供给楼主一个思路:楼主可以根据输入条件构造查询语句
记得多给分哦:)Top
2 楼toin((材娃))回复于 2006-03-02 11:51:46 得分 0
我有源码的哟Top
3 楼jjlook(勇)回复于 2006-03-02 11:56:22 得分 40
用存储过程比较好
declare @sql varchar(1000)
set @sql='select * from tb1 where 1=1'
if 条件1<>''
set @sql=@sql+' and col1='+@colValue
if 条件2<>''
...
execute(@sql)Top
4 楼coldpanth(^War3^)回复于 2006-03-02 12:02:15 得分 10
不知道你这几个查询条件是不是有好多字符型数据?如果只有一项是字符的,那么正常检索速度是相当快的,前提是有好的索引
如果有好多字符型字段,不想分别Like的话(也就是Like好多次,每Like一次就会遍历此表所有数据),就只能牺牲数据库空间了,将各项分别组合成新的字段,然后每次查询时,只针对那个组合字段来Like一次,例如,有3个需要查询的字段
字段1 字段2 字段3
新增如下字段
字段1和字段2 字段1和字段3 字段2和字段3 字段1和字段2和字段3
把数据Update接好,就可以了Top
5 楼coldpanth(^War3^)回复于 2006-03-02 12:03:18 得分 0
必竟硬盘相对于性能来说,还是硬盘便宜^_^Top
6 楼goody9807(http://goody9807.cnblogs.com)回复于 2006-03-02 12:19:23 得分 0
jjlook(勇) 的方法正解!Top
7 楼studydotnet(Dreamfly)回复于 2006-03-02 12:22:15 得分 0
只up不思考Top
8 楼long83(野猪林)回复于 2006-03-02 14:29:49 得分 0
我写了一个查询语句,但是不行,各位帮我看看
CREATE PROCEDURE [dbo].[qt_getemployeesinfo]
@ID varchar(12),
@NAME varchar(50),
@GZ varchar(6),
@COM varchar(12),
@DEPT varchar(6)
AS
declare @strSql varchar(1000)
declare @MN3011 varchar(6)
declare @MN2001 varchar(6)
declare @MN2002 varchar(6)
declare @MN1003 varchar(6)
set @MN3011='MN3011'
set @MN2001='MN2001'
set @MN2002='MN2002'
set @MN1003='MN1003'
set @strSql='SELECT BS_Employees.YGID as 工号, BS_Employees.YGName as 姓名, BS_Employees.ENGName as 英文名,
c.DictDName AS 性别, BS_Employees.GSID as 所属公司, a.DictDName as 所属部门, b.DictDName AS 职务,
BS_Employees.LXDH as 联系电话, BS_Employees.DZAddress as 联系地址, BS_Employees.RZRQ as 入职日期,
d.DictDName AS 状态
FROM BS_Employees INNER JOIN
BS_SysDictD a ON BS_Employees.DeptID = a.DictDID INNER JOIN
BS_SysDictD b ON BS_Employees.YGGZ = b.DictDID INNER JOIN
BS_SysDictD c ON BS_Employees.XBSex = c.DictDID INNER JOIN
BS_SysDictD d ON BS_Employees.ZTState = d.DictDID
WHERE (a.DictMNID = '
set @strSql=@strSql+@MN3011+') AND (b.DictMNID = '
set @strSql=@strSql+@MN2001+') AND (c.DictMNID = '
set @strSql=@strSql+@MN2002+') AND (d.DictMNID = '
set @strSql=@strSql+@MN1003+')'
if @ID <> '' BEGIN
set @strSql=@strSql+' AND Employees.YGID='+@ID
END
if @NAME <> '' BEGIN
set @strSql=@strSql+' AND Employees.YGName='+@NAME
END
if @GZ <> '' BEGIN
set @strSql=@strSql+' AND Employees.YGID='+@GZ
END
if @COM <> '' BEGIN
set @strSql=@strSql+' AND Employees.GSID='+@COM
END
if @DEPT <> '' BEGIN
set @strSql=@strSql+' AND Employees.DictDName='+@DEPT
END
execute(@strSql)
GO
Top
9 楼long83(野猪林)回复于 2006-03-03 08:58:42 得分 0
问题解决了,谢谢各位Top




