CRIAR PROCEDIMENTO GoalerPageSp
@IntPageSizeint,
@IntCurrPageint,
@strFieldsnvarchar(2000),
@strTablevarchar(200),
@strOnde varchar(800),
@strOrderType varchar(200),
@strKeyFieldvarchar(50)
COMO
DEFINIR NOCOUNT ATIVADO
DECLARE @tmpSQL nvarchar(4000)--Armazenamento de instruções SQL dinâmicas
DECLARE @tmpWhere varchar(800)
DECLARE @tmpAndWhere varchar(800) – usado para condições de consulta na página N (>1)
DECLARE @tmpOrder varchar(200)
DECLARE @tmpD_X varchar(2)
DECLARE @tmpMin_MAX varchar(3)
--Definir condições--
SE @strWhere FOR NULO OU RTRIM(@strWhere)=''
BEGIN--Sem condições de consulta
SET @tmpWhere=''
SET @tmpAndWhere=''
FIM
OUTRO
BEGIN - Existem condições de consulta
SET @tmpWhere=' ONDE '+@strOnde
SET @tmpAndWhere=' AND '+@strOnde
FIM
--Definir classificação--
SE @strOrderType! = 0
BEGIN - ordem inversa
DEFINIR @tmpD_X = '<'
DEFINIR @tmpMin_MAX = 'MIN'
SET @tmpOrder='ORDER BY ' +@strKeyField+ 'DESC'
FIM
OUTRO
COMEÇAR
DEFINIR @tmpD_X = '>'
DEFINIR @tmpMin_MAX = 'MÁX'
SET @tmpOrder='ORDER BY ' +@strKeyField+ 'ASC'
FIM
--Consulta SQL--
SE @IntCurrPage=1
Definir @tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder
OUTRO
SET @tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' WHERE ('+@strKeyField+' '+@tmpD_X+' (SELECT '+@tmpMin_MAX+'(' +@strKeyField+') FROM (SELECIONE SUPERIOR '+CAST(@IntPageSize*(@IntCurrPage-1) AS VARCHAR)+' '+@strKeyField+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder+') AS T))'+@tmpAndWhere+' ' +@tmpOrdem
EXEC(@tmpSQL)
IR
Método de chamada:
IntPageSize=20
strTable= [TableName] 'Nome da tabela de dados
strFields= Field1,Field2,Field3,Field4 'Os nomes das colunas a serem lidas
strKeyField=Campo1'chave primária: Aqui assume-se que Campo1 é a chave primária
strWhere='Condição: CampoA='b'
strOrderType=1'Método de classificação: 1 é ordem reversa, 0 é ordem sequencial
CurrPage=Request.QueryString(Página)
SE(CurrPage<> E Isnumérico(CurrPage))ENTÃO
CurrPage=CLNG(CurrPage)
SE(PáginaAtual<1)ENTÃOPáginaAtual=1
OUTRO
PáginaAtual=1
TERMINAR SE
SE strOnde<> ENTÃO
tmpWhere= ONDE &strOnde
OUTRO
tmpOnde=
TERMINAR SE
SE(SESSÃO(RecContagem)<>)ENTÃO
SE(SESSÃO(strOnde)<>strOnde)ENTÃO
RecCount=Conn.Execute(SELECT COUNT(&strKeyField&) FROM &strTable&tmpWhere)(0)
SESSÃO(RecContagem)=RecContagem
SESSÃO(strOnde)=strOnde
OUTRO
RecCount=SESSÃO(RecCont)
TERMINAR SE
OUTRO
RecCount=Conn.Execute(SELECT COUNT(*) FROM &strTable&tmpWhere)(0)
SESSÃO(RecContagem)=RecContagem
SESSÃO(strOnde)=strOnde
TERMINAR SE
SE(RecCount MOD IntPageSize <>0)ENTÃO
IntPageCount=INT(RecCount/IntPageSize)+1
OUTRO
IntPageCount=RecCount/IntPageSize
TERMINAR SE
DEFINIR Cmd=Server.CreateObject(Adodb.Command)
Cmd.CommandType=4
DEFINIR Cmd.ActiveConnection=Conn
Cmd.CommandText=GoalerPageSp
Cmd.Parameters.Append Cmd.CreateParameter(@IntPageSize,4,1,4,IntPageSize)
Cmd.Parameters.Append Cmd.CreateParameter(@IntCurrPage,4,1,4,CurrPage)
Cmd.Parameters.Append Cmd.CreateParameter(@strFields,200,1,2000,strFields)
Cmd.Parameters.Append Cmd.CreateParameter(@strTable,200,1,200,strTable)
Cmd.Parameters.Append Cmd.CreateParameter(@strWhere,200,1,800,strWhere)
Cmd.Parameters.Append Cmd.CreateParameter(@strOrderType,4,1,4,strOrderType)
Cmd.Parameters.Append Cmd.CreateParameter(@strKeyField,200,1,50,strKeyField)
DEFINIR RS=Cmd.Execute()
SE RecCount<1 ENTÃO
Response.Write (sem registro)
OUTRO
GetRecord=RS.GetRows(IntPageSize)
Para i=0 para Ubound(GetRecord,2)
Response.Write(GetRecord(0,i),GetRecord(1,i),GetRecord(2,i))'...conteúdo de saída
PRÓXIMO
GetRecord = Nulo
TERMINAR SE
DEFINIR RS=NADA
Amigos úteis, por favor, depurem você mesmo. O total de registros é recuperado usando ASP e armazenado em SESSION. Se você contar o total de registros todas as vezes, será muito demorado, é claro, se você quiser recuperar o total de registros no arquivo. procedimento armazenado, também é possível registrar e retornar o número total de páginas.
--Obter o número total de registros--
SET @tmpSQL='SELECT @getRecordCounts=COUNT('+@strKeyField+') FROM '+@strTable+@tmpWhere
EXEC sp_executesql @tmpSQL,N'@getRecordCounts int saída',@getRecordCounts SAÍDA
--Obter o número total de páginas--
SET @tempFolatNumber=@getRecordCounts%@IntPageSize
SE @getRecordCounts<=@IntPageSize
DEFINIR @getPageCounts=1
OUTRO
COMEÇAR
SE @tempFolatNumber! = 0
SET @getPageCounts=(@getRecordCounts/@IntPageSize)+1
OUTRO
SET @getPageCounts=(@getRecordCounts/@IntPageSize)
FIM
Não se esqueça de retornar os parâmetros de definição:
@getRecordCounts saída interna,--Retorna o total de registros
@getPageCounts int output – retorna o número total de páginas