多个查询条件的怎么实现

humdark 2006-03-02 11:44:45
要在一个系统中实现查询功能,系统界面上有多个查询条件需要用户输入,但允许用户只输入其中部分条件。因此查询需要根据用户输入的那几项进行,这样的查询怎么实现的效率高。能不能用存储过程来实现?
...全文
211 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
humdark 2006-03-03
  • 打赏
  • 举报
回复
问题解决了,谢谢各位
studydotnet 2006-03-02
  • 打赏
  • 举报
回复
只up不思考
goody9807 2006-03-02
  • 打赏
  • 举报
回复
jjlook(勇) 的方法正解!
coldpanth 2006-03-02
  • 打赏
  • 举报
回复
必竟硬盘相对于性能来说,还是硬盘便宜^_^
coldpanth 2006-03-02
  • 打赏
  • 举报
回复
不知道你这几个查询条件是不是有好多字符型数据?如果只有一项是字符的,那么正常检索速度是相当快的,前提是有好的索引

如果有好多字符型字段,不想分别Like的话(也就是Like好多次,每Like一次就会遍历此表所有数据),就只能牺牲数据库空间了,将各项分别组合成新的字段,然后每次查询时,只针对那个组合字段来Like一次,例如,有3个需要查询的字段
字段1 字段2 字段3

新增如下字段
字段1和字段2 字段1和字段3 字段2和字段3 字段1和字段2和字段3

把数据Update接好,就可以了
jjlook 2006-03-02
  • 打赏
  • 举报
回复
用存储过程比较好
declare @sql varchar(1000)
set @sql='select * from tb1 where 1=1'
if 条件1<>''
set @sql=@sql+' and col1='+@colValue
if 条件2<>''
...
execute(@sql)
永远- 2006-03-02
  • 打赏
  • 举报
回复
我有源码的哟
engine198473 2006-03-02
  • 打赏
  • 举报
回复
提供给楼主一个思路:楼主可以根据输入条件构造查询语句

记得多给分哦:)
humdark 2006-03-02
  • 打赏
  • 举报
回复
我写了一个查询语句,但是不行,各位帮我看看
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

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧