日期:2014-05-17  浏览次数:20721 次

多个排序条件报错?存储过程的事儿?
今天绑定列表时候需要多一个字段作为排序条件,报错了说字段无效,后来发现存储过程不支持多条件排序,下面贴出来求各路大神看看如果才能支持多个条件的排序呢?就剩这点分了5555
set ANSI_NULLS ON
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
begi