多个可选条件的查询

HenryXiaoY 2006-05-31 11:53:27
现在有一个表,表名FailedEvent,各字段如下:
EventName ErrType VisitID EventDate
varchar int int DateTime

现在想写一个存储过程来查询这个表中的数据,查询条件是这几个字段中的一个,或几个的组合.
各位老大帮我想想,有什么好的解决办法(最好简便).
...全文
557 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
marco08 2006-06-27
  • 打赏
  • 举报
回复
WHERE 1=1
AND EventName=ISNULL(@EventName, EventName)
AND ErrType=ISNULL(@ErrType, ErrType)
AND VisitID=ISNULL(@VisitID, VisitID)
AND EventDate=ISNULL(@VisitID, VisitID)
liudianhalf 2006-06-27
  • 打赏
  • 举报
回复
楼上的最精彩
willial 2006-06-26
  • 打赏
  • 举报
回复
用itblog(BegCSharp) 写的比较好.
bee6803 2006-06-26
  • 打赏
  • 举报
回复
学习。深受启发。
fcuandy 2006-06-24
  • 打赏
  • 举报
回复
WHERE 1=1已经是最方便的写法了
对于构建逻辑条件来说.
chinank 2006-06-24
  • 打赏
  • 举报
回复
在传参数(条件)的时候别传字段,传一个datatable,在代码层传的时候就设定好了,在数据曾接收给带参数的存储过程的时候就没有问题了,不用这么麻烦的数据库编写。
mc888 2006-06-22
  • 打赏
  • 举报
回复
create PROC p_test
@para1 varchar(100),
@para2 int,
@para3 int,
@para4 datetime
AS
SET NOCOUNT ON
SELECT * FROM t WHERE 1=1 AND EventName=isnull(@para1,EventName) and
ErrType=isnull(@para1,ErrType) and AND VisitID =isnull(@para3,VisitID)
AND EventDate=isnull(@Para4,EventDate)

go
go
HenryXiaoY 2006-06-22
  • 打赏
  • 举报
回复
不好意思,这几天忙别的事情,把这里给忘记了。
就是通过几个表的联合查询,查询条件可能是一个字段,也可能是几个字段的不同组合。
itblog 2006-06-06
  • 打赏
  • 举报
回复
说楼主你一下,你的办事效率太差了,几天的事情了,现在还没有搞定~

??????
如果有多个表的联合查询,有什么好的解决方法?
什么意思?


HenryXiaoY 2006-06-06
  • 打赏
  • 举报
回复
如果有多个表的联合查询,有什么好的解决方法?
jasonren 2006-06-02
  • 打赏
  • 举报
回复
学习
wangtiecheng(不知不为过,不学就是错!)
OracleRoob 2006-06-02
  • 打赏
  • 举报
回复
如果都能用Like,当然可以这样。

但并不是所有的条件都能用Like。
CoolKin9 2006-06-02
  • 打赏
  • 举报
回复
可以用一句话,在性能上有一些损失:
create PROC p_test
@para1 varchar(100),
@para2 int,
@para3 int,
@para4 datetime
AS
SELECT * FROM FailedEvent WHERE
EventName LIKE @para1+'%' AND
CONVERT(VARCHAR(16),ErrType) LIKE RTRIM(CONVERT(VARCHAR(16),@para2))+'%' AND
CONVERT(VARCHAR(16),VisitID) LIKE RTRIM(CONVERT(VARCHAR(16),@para2))+'%' AND
CONVERT(VARCHAR(16),EventDate,120) LIKE CONVERT(VARCHAR(16),@para4,120)+'%'
liangpei2008 2006-06-01
  • 打赏
  • 举报
回复
是这个意思吗?
CREATE PROC p_test
@para1 varchar(10)=null,
@para2 varchar(10)=null,
@para3 varchar(10)=null,
@para4 varchar(10)=null
AS
SET NOCOUNT ON
DECLARE @sql varchar(8000)
SET @sql='SELECT * FROM FailedEvent WHERE 1=1'
IF @para1 IS NOT NULL
SET @sql=@sql+' AND EventName='''+@para1+''''
IF @para2 IS NOT NULL
SET @sql=@sql+' AND ErrType ='''+@para2+''''
IF @para3 IS NOT NULL
SET @sql=@sql+' AND VisitID ='''+@para3+''''
IF @para4 IS NOT NULL
SET @sql=@sql+' AND EventDate='''+@para4+''''
EXEC(@sql)
OracleRoob 2006-06-01
  • 打赏
  • 举报
回复
使用动态SQL语句是最简单的处理方法。



动态sql语句基本语法
1 :普通SQL语句可以用Exec执行

eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N

2:字段名,表名,数据库名之类作为变量时,必须用动态SQL

eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格

当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名

declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错



declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确

3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?

declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num

paoluo 2006-06-01
  • 打赏
  • 举报
回复
itblog,你的@para2,@para3,@para4不做處理直接用來拼結SQL語句,會出錯的。
xeqtr1982 2006-06-01
  • 打赏
  • 举报
回复
动态sql是比较好的方法了
itblog 2006-06-01
  • 打赏
  • 举报
回复
create PROC p_test
@para1 varchar(100),
@para2 int,
@para3 int,
@para4 datetime
AS
SET NOCOUNT ON
DECLARE @sql varchar(8000)
SET @sql='SELECT * FROM t WHERE 1=1'
IF isnull(@para1,'')<>''
SET @sql=@sql+' AND EventName like ''%'+@para1+'%'''
IF isnull(@para2,'')<>''
SET @sql=@sql+' AND ErrType ='+@para2
IF isnull(@para3,'')<>''
SET @sql=@sql+' AND VisitID ='+@para3
IF isnull(@para4,'')<>''
SET @sql=@sql+' AND EventDate='''+@para4+''''
print @sql
EXEC(@sql)
GO
laoliu666 2006-06-01
  • 打赏
  • 举报
回复
六一同乐
HenryXiaoY 2006-06-01
  • 打赏
  • 举报
回复
没有比这更好的办法了吗?
加载更多回复(1)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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