首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL分页存储过程的BUG 修改有关问题

2012-03-30 
SQL分页存储过程的BUG 修改问题那位大侠帮我修改修改这个分页的存储过程,现在是如果指定了 排序字段 数据

SQL分页存储过程的BUG 修改问题
那位大侠帮我修改修改这个分页的存储过程,现在是如果指定了 排序字段 数据就有问题,不指定 就没问题。

SQL code
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE [dbo].[Common_GetRecordByPage]@tblName varchar(255), -- 表名@fldName varchar(255), -- 主键字段名@PageSize int = 10, -- 页尺寸@PageIndex int = 1, -- 页码@IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序@OrderField varchar(255)='', --设置排序字段 如果该字段为空,默认主键排序@strWhere varchar(1000) = '', -- 查询条件 (注意: 不要加 where)@tableJoin varchar(1000)='', --表连接@tableField varchar(1000)='' --表字段ASdeclare @strSQL varchar(6000) -- 主语句declare @strTmp varchar(1000) -- 临时变量(查询条件过长时可能会出错,可修改100为1000)declare @strOrder varchar(400) -- 排序类型declare @count varchar(6000)if @tableField =''set @tableField='*'if @OrderField !=''set @strOrder = ' order by [' + @OrderField +']'else set @strOrder = ' order by [' + @fldName +']'if @OrderType != 0beginset @strTmp = '<(select min'set @strOrder = @strOrder + ' desc'endelsebeginset @strTmp = '>(select max'set @strOrder = @strOrder + ' asc'endset @strSQL = 'select top ' + str(@PageSize) +@tableField  +' from ['+ @tblName + '] '+@tableJoin+' where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrderif @strWhere != ''set @strSQL = 'select top ' + str(@PageSize) + @tableField +' from ['+ @tblName + '] '+@tableJoin+' where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderif @PageIndex = 1beginset @strTmp =''if @strWhere != ''set @strTmp = ' where ' + @strWhereset @strSQL = 'select top ' + str(@PageSize) + @tableField +' from ['+ @tblName + '] '+ @tableJoin + @strTmp + ' ' + @strOrderendif @IsReCount != 0if @strWhere != ''set @count = 'select count(*) as Total from [' + @tblName + '] ' + @tableJoin +' where ' + @strWhereelseset @count = 'select count(*) as Total from [' + @tblName + ']'exec (@strSQL)exec (@count)


[解决办法]
那就不要指定。楼主多测试几次,看看问题出在什么地方,再找相应代码段看看
[解决办法]
SQL code
if @OrderField !=''set @strOrder = ' order by [' + @OrderField +']'else set @strOrder = ' order by [' + @fldName +']'
[解决办法]
探讨
引用:
那就不要指定。楼主多测试几次,看看问题出在什么地方,再找相应代码段看看


这种回复纯属 灌水

热点排行