存储过程sql server中的多个条件

时间:2014-07-25 08:28:11

标签: sql-server

我希望在网格上显示数据,并在两种情况下存储过程。

首先,如果过滤器为空或空白=结果'从*中选择*,其中isactive = 1'

并且如果filter不为null。我想选择*来自分区,其中代码如......

这是我的疑问。怎么了? 请帮忙解决...

DECLARE @Filter varchar(100)
DECLARE @SQL varchar(4000)
SET @SQL = 'select * from Division'
SET @SQL = @SQL + 'where'

IF @Filter is null or @Filter = ''
BEGIN
SET @SQL = @SQL + 'IsActive = 1'
END
ELSE
BEGIN
SET @SQL = @SQL + 'Code Like ''%' + @Filter + '%''' 
END

2 个答案:

答案 0 :(得分:1)

您的代码中没有任何空格,因此在第二个SET后,您的查询将如下所示:

'select * from divisionwhere'

这是语法错误。而不是使用动态SQL并陷入这种陷阱,尝试使用:

select * from division
where ((@Filter is null or @Filter = '') and IsActive = 1)
or (@Filter is not null and @Filter <> '' and Code Like ''%' + @Filter + '%'')

答案 1 :(得分:0)

我这下面的查询将有所帮助

DECLARE @Code varchar(10)---输入参数

DECLARE @IdFilter int = 0

IF ISNULL(@Code,'') = ''
    SET @IdFilter = 1    


select * from division WHERE (@IdFilter = 1 OR Code Like '%' + @Code + '%') and ISActive=1