SQL IF否则在where语句中

时间:2016-01-12 03:10:05

标签: sql

ALTER PROCEDURE [dbo].[sp_CourseEvalRpt_2]
    @coursetitle varchar(100) = null,
    @datestart varchar(8),
    @dateend varchar(8)
AS
    select distinct 
        t_empname, t_leader, T_Dept, t_submit 
    from 
        tbltrain
    where 
        t_category like 'course%' 
        and 
           if (@coursetitle <> '') t_course = @coursetitle end

当参数名@coursetitle为空时,如何消除SQL中的条件?当@coursetitle为空时我不想添加t_course条件,因此系统将显示所有数据而不是设置t_course =''。

3 个答案:

答案 0 :(得分:0)

尝试将您的sql更改为:

select distinct t_empname,
       t_leader,
       T_Dept,
       t_submit 
  from tbltrain
 where t_category like 'course%' 
   and ( (@coursetitle<>''and t_course=@coursetitle) 
         or @coursetitle='')

答案 1 :(得分:0)

您可以将where子句简化为:

where t_category like 'course%' and
      (@coursetitle = '' or t_course = @coursetitle) 

如果您使用NULL代替@coursetitle的空字符串,则可以将其标记为:

where t_category like 'course%' and
      t_course = coalesce(@coursetitle, t_course)

答案 2 :(得分:0)

如何使用动态SQL?这样您就可以执行明确的IF ELSE条件。

只需为SQL查询添加SQLQuery变量并使用动态SQL

ALTER PROCEDURE [dbo].[sp_CourseEvalRpt_2]

@coursetitle varchar(100)=null,
@datestart varchar(8),
@dateend varchar(8),
@SQLQuery varchar(max) -->> Additional variable for dynamic SQL
AS

SET @SQLQuery = 'select distinct t_empname,t_leader,T_Dept,t_submit 
                 from tbltrain where t_category like course%'

IF ISNULL(@coursetitle,'') <> ''
    BEGIN
       SET @SQLQuery = @SQLQuery + 'AND t_course = ' + @coursetitle 
    END

EXEC (@SQLQuery)