sql server 分页存储过程,该如何处理
sql server 分页存储过程
当我在查询条件中加入' or 1=1--的时候就会出错,然后其他方法查询显示的结果都是正常的,请问这是哪里出问题了?求帮忙
------解决思路----------------------
你加在啥地方呢?
另外,你可以自己掌握一些解决的方法,比如在查询分析器上面试着运行下,然后,把存储过程的EXEC(@SQL)改成PRINT @SQL 看下,打印出来的有没有什么问题
最后,在SQL的字符串里,要用两个单引号''才能表示一个在字符串里的单引号
------解决思路----------------------
如果条件是 where A and B or 1=1 形式,无论 A、B 是否为真,1=1总是为真的,所以等于是不加条件全部返回啊。
你加 or 1=1 要做什么?
alter proc PageAmin_Register
@PageSize int,@NowPage int,@Register_user varchar(100),@Register_person varchar(100),@Register_name varchar(100),@Register_email varchar(100),@Register_state varchar(100),@Begin_time varchar(30),@End_time varchar(30)
as
declare @sqlwhere varchar(200)
if ISNULL(@Begin_time,'')=''
begin
if ISNULL(@End_time,'')=''
begin
set @sqlwhere=''
end
else
begin
set @sqlwhere=' and Register_Applytime<'''+cast(@End_time as varchar(20))+''''
end
end
else
begin
if ISNULL(@End_time,'')=''
begin
set @sqlwhere=' and Register_Applytime>='''+cast(@Begin_time as varchar(20))+''''
end
else
begin
set @sqlwhere=' and Register_Applytime between '''+cast(@Begin_time as varchar(20))+''' and '''+cast(@End_time as varchar(20))+''''
end
end
declare @sqlwhere2 varchar(500)
set @sqlwhere2=@sqlwhere+' and Register_user like '+cast(@Register_user as varchar(100))+' and Register_person like '+cast(@Register_person as varchar(100))+' and Register_name like '+cast(@Register_name as varchar(100))+' and Register_email like '+cast(@Register_email as varchar(100))+' and Register_state like '+cast(@Register_state as varchar(100))+'';
declare @sql1 varchar(max)
set @sql1='select * from(select top '+cast(@PageSize*@NowPage as varchar(20) )+' row_number() over(order by id asc) as rowid,(select count(*) from Admin_Register where 1=1 '+@sqlwhere2+') as allcount,* from Admin_Register where 1=1 '+@sqlwhere2+') as temp where rowid>'+cast((@PageSize*(@NowPage-1)) as varchar(20))+' order by Register_Applytime desc'
exec (@sql1)
当我在查询条件中加入' or 1=1--的时候就会出错,然后其他方法查询显示的结果都是正常的,请问这是哪里出问题了?求帮忙
------解决思路----------------------
你加在啥地方呢?
另外,你可以自己掌握一些解决的方法,比如在查询分析器上面试着运行下,然后,把存储过程的EXEC(@SQL)改成PRINT @SQL 看下,打印出来的有没有什么问题
最后,在SQL的字符串里,要用两个单引号''才能表示一个在字符串里的单引号
------解决思路----------------------
如果条件是 where A and B or 1=1 形式,无论 A、B 是否为真,1=1总是为真的,所以等于是不加条件全部返回啊。
你加 or 1=1 要做什么?