Sql Server 存储过程 动态添加WHERE条件

多条件查询存储过程 例一

create proc pr_select_Natural

(

 @CDATE  datetime,

 @FAC_NAME varchar(50),

 @BATTERY_TYPE varchar(20),

 @MAKE_MODE varchar(20),

 @PRODUCE_MODE varchar(20),

 @YEAR  char(4),

 @MONTH  char(2),

 @TDATE  datetime,

 @PAGENUM varchar(12)

)

as

declare @strWhere varchar(500)

if ( @CDATE = null ) 

 set @strWhere = @strWhere+' and CDATE ='+ @CDATE

if ( @FAC_NAME = null ) 

 set @strWhere = @strWhere+' and FAC_NAME like ''%''+@FAC_NAME+''%'' '

if ( @BATTERY_TYPE = null ) 

 set @strWhere = @strWhere+' and BATTERY_TYPE like ''%''+@BATTERY_TYPE+''%'''

if ( @MAKE_MODE = null ) 

 set @strWhere = @strWhere+' and MAKE_MODE like ''%''+@MAKE_MODE+''%'''

if ( @PRODUCE_MODE = null ) 

 set @strWhere = @strWhere+' and PRODUCE_MODE like ''%''+@PRODUCE_MODE+''%'''

if ( @YEAR = null ) 

 set @strWhere =@strWhere+ ' and YEAR like ''%''+@YEAR+''%'''

if ( @MONTH = null ) 

 set @strWhere = @strWhere+' and MONTH like ''%''+@MONTH+''%'''

if ( @TDATE = null ) 

 set @strWhere = @strWhere+' and TDATE = @TDATE'

if ( @PAGENUM = null ) 

 set @strWhere = @strWhere+' and PAGENUM like ''%''+@PAGENUM+''%'''

 

set @strMAIN = 'select 

  CDATE  as 出厂时间,

  FAC_NAME  as 发货厂家,

  BATTERY_TYPE as 电池型号,

  SEND_TYPE as 发货类型,

  SEND_NUM as 检测数量,

  MAKE_MODE as 制作方式,

  PRODUCE_MODE as 生产方式,

  BATTERY_NUM as 电池组数量,

  [YEAR]  as 年,

  [MONTH] as 月,

  TDATE  as 日期,

  SEND_RULE as 发货规则,

  SEND_CODE as 发货组编号,

  BATTERY_SORT as 电池类别,

  PAGENUM as 条码号,

  FITTING_CODE as 装配号,

  LINE_CODE as 生产机号,

  FLAG  as 是否放行,

  REMARK  as 备注,

  OTHER  as 其他,

  BLANK_COL as 空白列

    from T_INFOCODE_NATURAL

 where 1=1 ' +@strWhere

exec(@strMAIN) 
 多条件查询存储过程 例二
------------表中的字段---------------

CREATE TABLE [dbo].[stuInfo] (

[FNumber] [int] IDENTITY(1,1) NOT NULL ,

[FName] [nvarchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[FNameen] [varchar] (35) COLLATE Chinese_PRC_CI_AS  ,

[FSex] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[FEducation] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[FCardID] [char] (18) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[FBirDate] [datetime] NOT NULL ,

[FTech] [nvarchar](50) COLLATE Chinese_PRC_CI_AS ,

[FSubject] [nvarchar](50) COLLATE Chinese_PRC_CI_AS,

[FJiF] [nvarchar](100)COLLATE Chinese_PRC_CI_AS,

[FJobAdd][nvarchar](100)COLLATE Chinese_PRC_CI_AS,

[FExamNum][varchar](30)COLLATE Chinese_PRC_CI_AS NOT NULL,

[FServerNum] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[FExamDate] [datetime] NOT NULL ,

[FIsAE] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL 

) ON [PRIMARY]

GO

----------存储过程-------------------------

IF EXISTS(SELECT *FROM SYSOBJECTS WHERE NAME='PROC_Look')

DROP PROC  PROC_Look

GO

CREATE PROC PROC_Look



@FName  NVARCHAR(30)=NULL,

@FNameen VARCHAR(35)=NULL,

@FCardID CHAR(18)=NULL,

@FExamNum NVARCHAR(30)=NULL,

@FServerNum NVARCHAR(30)=NULL,

@FSex  CHAR(1)=NULL,

@FEducation CHAR(1)=NULL,

@FIsAE  CHAR(1)=NULL,

@FTech  NVARCHAR(50)=NULL,

@FSubject NVARCHAR(50)=NULL,

@FJiF  NVARCHAR(100)=NULL,

@FJobAdd NVARCHAR(100)=NULL,

@FStartTime DATETIME=NULL,

@FEndTime DATETIME=NULL



  

AS

declare @sqlStr varchar(100)

        

if @FName IS NOT NULL

begin

  set @sqlStr=' where FName='+''''+@FName+'''' 

end

        

if @FNameen IS NOT NULL

begin

    if @sqlStr IS NOT NULL

        set @sqlStr=@sqlStr+' and FNameen='+''''+@FNameen+'''' 

    else

  set @sqlStr=' where FNameen='+''''+@FNameen+''''

end

    

if @FCardID IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FCardID='+''''+@FCardID+'''' 

  else

  set @sqlStr=' where FCardID='+''''+@FCardID+''''

end



if @FExamNum IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FExamNum='+''''+@FExamNum+''''

  else

  set @sqlStr=' where FExamNum='+''''+@FExamNum +''''

end



if @FServerNum IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FServerNum='+''''+@FServerNum+''''

  else

  set @sqlStr=' where FServerNum='+''''+@FServerNum+''''

end



if @FSex IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FSex='+''''+@FSex+''''

  else

  set @sqlStr=' where FSex='+''''+@FSex+''''

end



if @FEducation IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FEducation='+''''+@FEducation+''''

                        

                        

  else

  set @sqlStr=' where FEducation='+''''+@FEducation+''''

  

end 

if @FIsAE IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FIsAE='+''''+@FIsAE+''''

                        

  else

  set @sqlStr=' where FIsAE='+''''+@FIsAE+''''

                        

end

if @FTech IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FTech='+''''+@FTech+''''

  else

  set @sqlStr=' where FTech='+''''+@FTech+''''

end



if @FSubject IS NOT NULL

  begin

  if @sqlStr IS NOT NULL

    set @sqlStr=@sqlStr+' and FSubject='+''''+@FSubject+''''

  else

    set @sqlStr=' where FSubject='+''''+@FSubject +''''

  end

if @FJiF IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FJiF='+''''+@FJiF+'''' 

  else

  set @sqlStr=' where FJiF='+''''+@FJiF+''''

end

if @FJobAdd IS NOT NULL

begin

  if @sqlStr IS NOT NULL

  set @sqlStr=@sqlStr+' and FJobAdd='+''''+@FJobAdd +''''

  else

  set @sqlStr=' where FJobAdd='+''''+@FJobAdd +''''

end

EXEC('select *from stuInfo '+ @sqlStr)

GO



 



你可能感兴趣的:(SQL Server)