ROW_を使うNUMBER()の改ページ保存プロセス

1716 ワード

今日は新しいプロジェクトをする時は改ページを使います。以前やったプロジェクトの中から改ページの保存過程を見つけて、直接に表の名前を入れて改ページすることができます。ROW_を使いました。NUMBER()関数はMSSQL 2005以上に適用されますので、あらかじめメモしておきます。
 -- =============================================
-- Author:		  
-- Create date: 2009-07-22 12:41
-- Description:	  ,   ROW_NUMBER()
-- =============================================
create PROCEDURE [dbo].[proc_ShowPage]
@tblName   varchar(255),       --   
@strGetFields varchar(1000) = '*', --       ,  *
@strOrder varchar(255)='',      --       ,  
@strOrderType varchar(10)='ASC', --      ,  ASC
@PageSize   int = 10,          --    ,  10
@PageIndex int = 1,           --   ,  1
@strWhere varchar(1500) = '' --      (  :     where)
AS

declare @strSQL   varchar(5000)

if @strWhere !=''
set @strWhere=' where '+@strWhere

set @strSQL=
'SELECT * FROM ('+
	'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strGetFields+' '+
	'FROM '+@tblName+' '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)

exec (@strSQL)
 
以下は呼び出しの例です。ここでジョイン接続ができます。
 
EXEC	[proc_ShowPage]
		@tblName = N'(project p inner join projectca ca on p.caid=ca.id)',
		@strGetFields = N'p.title,ca.caname',
		@strOrder = N'p.id',
		@strOrderType = N'desc',
		@PageSize = 12,
		@PageIndex = 1,
		@strWhere = N''