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 =''。
答案 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)