日期:2014-05-18  浏览次数:20392 次

急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
USE [#80Tao_HLSupermarket#]
GO
/****** Object: StoredProcedure [dbo].[SP_Help_SELECT_GetAllList] Script Date: 11/24/2011 09:48:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_Help_SELECT_GetAllList]

@categoryID varchar(20),--分类ID
@isURL int, --是否启用
@helpTitle varchar(200),--关键字
@pageSize int output, --分页大小
@pageTotal int output, --页总数
@pageCurrent int output, --当前页
@RecordTotal int output --记录总数

AS
declare @SQL varchar(800) --组合的SQL语句
declare @PageSQL nvarchar(800) --组合的SQL语句
declare @WHERE varchar(500)='' --组合WHERE条件
declare @TempRecordTotal varchar(300) --记录总数
BEGIN

--设置条件
if(@categoryID<>'' or @isURL<>-1 or @helpTitle<>'')
BEGIN
SET @WHERE = ' WHERE 1=1 '
if(@categoryID<>'') BEGIN SET @WHERE = @WHERE+' and categoryID like ''%,'+convert(varchar(5),@categoryID)+',%''' END
if(@isURL<>-1) BEGIN SET @WHERE = @WHERE+' and isURL=' + CONVERT(varchar(20),@isURL) END
if(@helpTitle<>'') BEGIN SET @WHERE = @WHERE+' and (helpTitle like ''%'+@helpTitle+'%'' )' END
END

--设置总记录数
SET @PageSQL ='SELECT @RecordTotal = count(helpTitle) from [Help]'+@WHERE
exec sp_executesql @PageSQL,N'@RecordTotal int output',@RecordTotal output

--设置页总数
IF @RecordTotal % @pageSize=0
BEGIN 
SET @pageTotal = @RecordTotal/@pageSize 
END 
ELSE 
BEGIN 
SET @pageTotal = @RecordTotal/@pageSize+1 
END

--设置当前页数
IF(@pageCurrent<1) BEGIN SET @pageCurrent = 1 END
IF(@pageCurrent>@pageTotal) BEGIN SET @pageCurrent = @pageTotal END
IF(@pageCurrent=1)
BEGIN
SET @SQL='SELECT TOP '+convert(varchar(5),@pageSize)+' ROW_NUMBER() OVER(ORDER BY categoryID asc,ID asc) RowNumber,* from [Help] '+@WHERE+' Order by categoryID asc,ID asc'
END
exec (@SQL)

END


急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))
急急急~求哪位高手能帮我把这段存储过程修改成可用的、完整的存储过程(要求功能有分页和条件查询))

------解决方案--------------------
SQL code
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_Help_SELECT_GetAllList]
(
    @pageSize int, --分页大小
    @pageCurrent int, --当前页
    @Where NVARCHAR(2000)='',
    @pageTotal int output, --页总数
    @RecordTotal int OUTPUT --记录总数
)

AS
declare @SQL varchar(2000) --组合的SQL语句
declare @PageSQL nvarchar(2000) --组合的SQL语句

BEGIN

--设置总记录数
SET @PageSQL ='SELECT @RecordTotal = count(helpTitle) from [Help] where 1=1 '+@WHERE
exec sp_executesql @PageSQL,N'@RecordTotal int output',@RecordTotal output

--设置页总数
IF @RecordTotal % @pageSize=0
    BEGIN 
        SET @pageTotal = @RecordTotal/@pageSize 
    END 
ELSE 
    BEGIN 
        SET @pageTotal = @RecordTotal/@pageSize+1 
    END

--设置当前页数
IF(@pageCurrent<1) 
    BEGIN 
        SET @pageCurrent = 1
    END

BEGIN
SET @SQL=
'SELECT ROW_NUMBER() OVER(ORDER BY categoryID asc,ID asc) RowNumber,* 
from [Help] 
where RowNumber between '+RTRIM((@pageCurrent-1)*@pageSize+1)+' and '+RTRIM(@pageCurrent*@pageSize)+'
'
END
exec (@SQL)

END

GO
--調用

DECLARE @pageTotal INT,@RecordTotal int
EXEC [SP_Help_SELECT_GetAllList] 
@pageSize=20,
@pageCurrent=2,
@Where='',--有條件就在這里加 格式 ' and helpTitle  like ''abd%'''
@pageTotal=@pageTotal OUTPUT,
@RecordTotal=@RecordTotal OUTPUT
SELECT @pageTotal,@RecordTotal