实体类的各个属性OR关系search PROC IN SQL

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

 

 

 

 

 


ALTER             proc User_ConditionalLineSearch
(
 @UserID  int,
 @UserName nvarchar(100),
 @PassWord nvarchar(100),
 @RegistDate datetime,
 @Email  nvarchar(500),
 @Tel  nvarchar(500),
 @RealName nvarchar(100),
 @NickName nvarchar(500),
 @Type  int
)
AS

Declare @QueryString NVarchar(2000)
Declare @ParaCount int
Declare @tmpCount int

set @ParaCount = 0
set @tmpCount = 0
if ( @UserID > 0 )
begin
set @ParaCount = @ParaCount+1
end

if ( len(@UserName) > 0 )
begin
set @ParaCount = @ParaCount+1
end

if (len(@PassWord) > 0 )
begin
set @ParaCount = @ParaCount+1
end

if ( datediff (day,@RegistDate,'1900-1-1') != 0)
begin
set @ParaCount = @ParaCount+1
end

if (len(@Email) > 0 )
begin
set @ParaCount = @ParaCount+1
end

if (len(@Tel)>0)
begin
set @ParaCount = @ParaCount+1
end

if (len(@RealName)>0)
begin
set @ParaCount = @ParaCount+1
end

if (len(@NickName)>0)
begin
set @ParaCount = @ParaCount+1
end


set @QueryString ='select * from [User] where 1=0 or '
IF ( @Type = 0 ) --字符串或者数字的等于模式
BEGIN
 
 if ( @UserID > 0 )
 begin 
 set @QueryString = @QueryString + 'UserID='+cast(@UserID as nvarchar)
 
 set @tmpCount = @tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +' or '
  end
 end
 
 if ( len(@UserName) > 0 )
 begin
 set @QueryString = @QueryString +  begin
 set @QueryString=@QueryString+'datediff(day, convert ( datetime, '''+ convert ( nvarchar(12),@RegistDate ,1 )  +''',1),RegistDate) = 0'
 set @tmpCount=@tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +' or '
  end
 end

 if ( len(@Email) > 0 )
 begin
 set @QueryString = @QueryString +

'+'''%'+@UserName+'%'''
 set @tmpCount = @tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +' or '
  end
 end

 if ( len(@PassWord) > 0 )
 begin
 set @QueryString = @QueryString + 'PassWord like '+'''%'+@PassWord+'%'''
 set @tmpCount = @tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +'or '
  end
 end
 if ( datediff (day,@RegistDate,'1900-1-1') != 0)
 begin
 set @QueryString=@QueryString+'datediff(day, convert ( datetime, '''+ convert ( nvarchar(12),@RegistDate ,1 )  +''',1),RegistDate) = 0'
 set @tmpCount=@tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +'or '
  end
 end
 if ( len(@Email) > 0 )
 begin
 set @QueryString = @QueryString + 'Email like '+'''%'+@Email+'%'''
 set @tmpCount = @tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +'or '
  end
 end
 
 if ( len(@Tel) > 0 )
 begin
 set @QueryString = @QueryString + 'Tel like '+'''%'+@Tel+'%'''
 set @tmpCount = @tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +'or '
  end
 end
 
 if ( len(@RealName) > 0 )
 begin
 set @QueryString = @QueryString + 'RealName like '+'''%'+@RealName+'%'''
 set @tmpCount = @tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +'or '
  end
 end
 
 if ( len(@NickName) > 0 )
 begin
 set @QueryString = @QueryString + 'NickName like '+'''%'+@NickName+'%'''
 set @tmpCount = @tmpCount+1
 if ( @tmpCount !=  @ParaCount )
  begin
  set @QueryString = @QueryString +'or '
  end
 end
END
--select (@QueryString)
exec(@QueryString)

 

 

 

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值