我正在尝试创建一个存储过程,它将根据输入返回记录。如果所有输入参数都为空,则返回整个表,否则使用参数并返回记录:
create procedure getRecords @parm1 varchar(10) = null, @parm2 varchar(10) = null, @parm3 varchar(10) = null
as
declare @whereClause varchar(500)
set @whereClause = ' where 1 = 1 '
if (@parm1 is null and @parm2 is null and @parm3 is null)
select * from dummyTable
else
begin
if (@parm1 is not null)
set @whereClause += 'and parm1 = ' + '' + @parm1 + ''
if (@parm2 is not null)
set @whereClause += 'and parm2 = ' + '' + @parm2 + ''
if (@parm3 is not null)
set @whereClause += 'and parm3 = ' + '' + @parm3 + ''
select * from dummyTable @whereClause <-- Error
end
创建此过程时出错是“在条件所在的上下文中指定的非 bool 类型的表达式”
如果我构建 where 子句的方法有误,请评论?
谢谢
最佳答案
select * from dummyTable
where (parm1 = @parm1 OR @parm1 IS NULL)
and (parm2 = @parm2 OR @parm2 IS NULL)
and (parm3 = @parm3 OR @parm3 IS NULL)
;
关于sql - 基于sql中的空/非空参数构建where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17579402/