我希望在网格上显示数据,并在两种情况下存储过程。
首先,如果过滤器为空或空白=结果'从*中选择*,其中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
答案 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