多个排序条件报错?存储过程的事儿?
今天绑定列表时候需要多一个字段作为排序条件,报错了说字段无效,后来发现存储过程不支持多条件排序,下面贴出来求各路大神看看如果才能支持多个条件的排序呢?就剩这点分了5555
set ANSI_NULLS ON多条件排序?SQL?存储过程?
set QUOTED_IDENTIFIER ON
go
------ 海量数据库分页存储过程 ------
--参数列表:
--@tblName -- 表名(必添);
--@pkid --主键
--@strGetFields -- 需要返回的列(默认所有列);
--@fldName -- 排序的字段名(必添);
--@PageSize -- 页尺寸(默认每页10条);
--@PageIndex -- 页码(默认第1页);
--@doCount -- 返回记录总数,非"0"值则返回(用处不大);
--@OrderType -- 设置排序类型,非"0"值则降序(默认正序);
--@strWhere -- 查询条件(警告:不需要加 where);
--调用示例:exec PageShow TEST,ID,"*" order ,20,1,0,1,"name='DF'"
--调用示例:
--exec PageShow
--@tblName="表名",
--@pkid="主键",
--@strGetFields="需要返回的列(默认所有列)",
--@fldName="排序的字段名",
--@PageSize=页尺寸(默认每页10条),
--@PageIndex=页码(默认第1页),
--@doCount=返回记录总数,非"0"值则返回(用处不大),
--@OrderType=设置排序类型,非"0"值则降序(默认正序),
--@strWhere="查询条件(警告:不需要加 where)例如StuSex='男'"
---------------------------------------------------------
ALTER PROCEDURE [dbo].[PageShow]
@doCount int= 0 ,
@tblName varchar(255),
@strWhere varchar(1500) = '',
@pkid varchar(50) = '*',
@strGetFields varchar(1000) = '*',
@fldName varchar(255)='',
@OrderType int = 0,
@PageSize int = 10,
@PageIndex int = 1
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
begin tran
if @doCount != 0
begin
if @strWhere !=''
begin
set @strSQL = 'select count(['+@pkid+']) as Total from ['+ @tblName +'] where '+@strWhere
end
else
begin
set @strSQL = 'select count(['+@pkid+']) as Total from [' + @tblName + ']'
end
print @Strsql
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
--print @strSQL
exec (@strSQL)
if @@error<>0
rollback
else
commit tran
[解决办法]