存储过程中使用Like

文章来自:CSDN-xiayuzhongdexiaotan

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS OFF 
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetOperationLogs]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[GetOperationLogs]
GO

/* 查询Voltage_Dist_Data的存储过程 */
create procedure GetOperationLogs
(
    @useridList varchar(500),  
    @BeginTime datetime,
    @EndTime datetime,
    @description varchar(500)
)
as
begin
declare @s varchar(2000)
set @s='select * from d_lg_6'
/* 如果没有设置任何查询条件,在返回所有的operationlogs */
if ((@useridList=null)and(@BeginTime=null)and(@EndTime=null)and(@Description=null))
begin
    exec(@s)
    return
end      
set @s=@s+' where '
/*如果设置了useridList,则返回这些用户的OperationLogs */
if (@useridList!=null)
    set @s=@s+' userid in ('+@useridList+') and '
    /*如果设置了查询时间,则返回该时间那的查询时间*/
    if ((@BeginTime!=null)and(@EndTime!=null))
    set @s=@s+' logtime between '''+convert(varchar(19),@BeginTime,120)+''' and '''+convert(varchar(19),@endtime,120)+''' and '
/*如果设置了日志内容过滤器,则过滤日志内容 */
if (@Description!=null)
    set @s=@s+' Description like ''%'+@Description+'%'''
    if (substring(@s,len(@s)-2,3)='and')
    set @s=substring(@s,0,len(@s)-3)
    exec(@s)
--select @s
--select substring(@s,len(@s)-2,3)
end
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO 
这里的关键还是 两个单眼号的连续使用,注意观察
if (@Description!=null)
    set @s=@s+' Description like ''%'+@Description+'%'''
这里%旁边的是两个单眼号,而不是双眼号;
select * from Book where BookName   like '%'+@BookName+'%'

 

posted @ 2013-05-29 12:00  学海无涯1999  阅读(183)  评论(0)    收藏  举报