SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--参数说明
/*
@strTable --要显示的表或多个表的连接
@strField --要查询出的字段列表,*表示全部字段
@pageSize --每页显示的记录个数
@pageIndex --要显示那一页的记录
@strWhere --查询条件,不需where
@strSortKey --用于排序的主键
@strSortField --用于排序,如:id desc (多个id desc,dt asc)
@strOrderBy --排序,0-顺序,1-倒序
@pageCount --查询结果分页后的总页数
@RecordCount --查询到的总记录数
*/ ALTER PROCEDURE [dbo].[GETProductByPage]
@strTable varchar(50) = '[dbo].[product]',
@strField varchar(50) = '*',
@pageSize int = 10,
@pageIndex int = 1,
@strWhere varchar(50),
@strSortKey varchar(50) = '[productname]',
@strSortField varchar(50) = '[productname] DESC',
@strOrderBy bit = 0,
@pageCount int OUTPUT,
@RecordCount int OUTPUTAS
SET NOCOUNT ON
Declare @sqlcount INT
Declare @timediff DATETIME
select @timediff=getdate() 
DECLARE @sql nvarchar(max),@where1 varchar(max),@where2 varchar(max)
IF @strWhere is null or rtrim(@strWhere)=''
BEGIN--没有查询条件 
SET @where1=' WHERE ' 
SET @where2=' '
END
ELSE
BEGIN--有查询条件 
SET @where1=' WHERE ('+ @strWhere +') AND ' --本来有条件再加上此条件 
SET @where2=' WHERE ('+ @strWhere +') ' --原本没有条件而加上此条件
END
--SET @sql='SELECT @intResult=COUNT(*) FROM '+@strTable+@where2
BEGIN
SET @sql='SELECT @sqlcount=COUNT(*) FROM (select '+@strSortKey+' from '+ @strTable + @where2 +') As tmptab'
ENDEXEC sp_executesql @sql,N'@sqlcount int OUTPUT',@sqlcount OUTPUT -- 计算总记录数
SELECT @pageCount=CEILING((@sqlcount+0.0)/@pageSize) --计算总页数
SELECT @RecordCount = @sqlcount --设置总记录数
IF @pageIndex=1 --第一页
BEGIN
SET @sql='SELECT TOP '+CAST(@pageSize AS varchar(max))+' '+@strField+' FROM '+@strTable+ @where2+'ORDER BY '+ @strSortField 
END
Else
BEGIN
IF @strOrderBy=0 
SET @sql='SELECT TOP '+CAST(@pageSize AS varchar(max))+' '+@strField+ ' FROM '+@strTable+@where1+@strSortKey+'>(SELECT MAX('+@strSortKey+') '+ ' FROM (SELECT TOP '+CAST(@pageSize*(@pageIndex-1) AS varchar(max))+' '+ @strSortKey+' FROM '+@strTable+@where2+'ORDER BY '+@strSortField+') t) ORDER BY '+@strSortField
ELSE 
SET @sql='SELECT TOP '+CAST(@pageSize AS varchar(max))+' '+@strField+' FROM '+@strTable+@where1+@strSortKey+'<(SELECT MIN('+@strSortKey+') '+ ' FROM (SELECT TOP '+CAST(@pageSize*(@pageIndex-1) AS varchar(max))+' '+ @strSortKey+' FROM '+@strTable+@where2+'ORDER BY '+@strSortField+') t) ORDER BY '+@strSortField
END
EXEC(@sql)这个分页储存过程,查询条件的变量为@strWhere
当查询条件为"[列名]=123"这样的可以正常执行,我想实现模糊查询 [列名] like '%123%',在执行的时候总报在like附近有语法错误(like后面的引号用单引、双引都试过了), 请各位大侠指点一下这个储存过程应该怎么改才能实现模糊查询!!!