절차 생성 GoalerPageSp
@IntPageSize 정수,
@IntCurrPage 정수,
@strFields nvarchar(2000),
@strTable varchar(200),
@strWhere varchar(800),
@strOrderType varchar(200),
@strKeyField varchar(50)
처럼
카운트 없음 설정
DECLARE @tmpSQL nvarchar(4000)--스토리지 동적 SQL 문
@tmpWhere varchar(800) 선언
DECLARE @tmpAndWhere varchar(800)--N 페이지의 쿼리 조건에 사용됨(>1)
@tmpOrder varchar(200) 선언
@tmpD_X varchar(2) 선언
@tmpMin_MAX varchar(3) 선언
--조건 설정--
IF @strWhere가 NULL이거나 RTRIM(@strWhere)=''입니다.
BEGIN--쿼리 조건 없음
SET @tmpWhere=''
SET @tmpAndWhere=''
끝
또 다른
BEGIN--쿼리 조건이 있습니다.
SET @tmpWhere=' WHERE '+@strWhere
SET @tmpAndWhere=' AND '+@strWhere
끝
--정렬 설정--
IF @strOrderType != 0
BEGIN--역순
SET @tmpD_X = '<'
SET @tmpMin_MAX = 'MIN'
SET @tmpOrder=' ORDER BY ' +@strKeyField+ ' DESC'
끝
또 다른
시작하다
SET @tmpD_X = '>'
SET @tmpMin_MAX = 'MAX'
SET @tmpOrder=' ORDER BY ' +@strKeyField+ ' ASC'
끝
--SQL 쿼리--
IF @IntCurrPage=1
@tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder 설정
또 다른
SET @tmpSQL='SELECT TOP '+CAST(@IntPageSize AS VARCHAR)+' '+@strFields+' FROM '+@strTable+' WHERE ('+@strKeyField+' '+@tmpD_X+' (SELECT '+@tmpMin_MAX+'(' +@strKeyField+') FROM (맨 위 선택 '+CAST(@IntPageSize*(@IntCurrPage-1) AS VARCHAR)+' '+@strKeyField+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder+') AS T))'+@tmpAndWhere+' ' +@tmp주문
EXEC(@tmpSQL)
가다
호출 방법:
IntPageSize=20
strTable= [TableName] '데이터 테이블 이름
strFields= Field1,Field2,Field3,Field4 '읽을 컬럼명
strKeyField=Field1'기본 키: 여기서는 Field1이 기본 키라고 가정합니다.
strWhere='조건: FieldA='b'
strOrderType=1'정렬 방법: 1은 역순, 0은 순차
CurrPage=Request.QueryString(페이지)
IF(현재 페이지<> 및 숫자(현재 페이지))THEN
CurrPage=CLNG(현재 페이지)
IF(현재 페이지<1)THEN 현재 페이지=1
또 다른
현재페이지=1
종료 IF
IF strWhere<> THEN
tmpWhere= 어디서 &strWhere
또 다른
tmp어디=
종료 IF
IF(세션(RecCount)<>)THEN
IF(SESSION(strWhere)<>strWhere)THEN
RecCount=Conn.Execute(SELECT COUNT(&strKeyField&) FROM &strTable&tmpWhere)(0)
세션(RecCount)=RecCount
세션(strWhere)=strWhere
또 다른
RecCount=세션(RecCount)
종료 IF
또 다른
RecCount=Conn.Execute(&strTable&tmpWhere에서 SELECT COUNT(*))(0)
세션(RecCount)=RecCount
세션(strWhere)=strWhere
종료 IF
IF(RecCount MOD IntPageSize <>0)THEN
IntPageCount=INT(RecCount/IntPageSize)+1
또 다른
IntPageCount=RecCount/IntPageSize
종료 IF
SET Cmd=Server.CreateObject(Adodb.Command)
Cmd.CommandType=4
SET Cmd.ActiveConnection=연결
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)
SET RS=Cmd.Execute()
IF RecCount<1 THEN
응답.쓰기(기록 없음)
또 다른
GetRecord=RS.GetRows(IntPageSize)
i=0인 경우 Ubound(GetRecord,2)로
Response.Write(GetRecord(0,i),GetRecord(1,i),GetRecord(2,i))'...출력 내용
다음
GetRecord=널
종료 IF
RS=아무것도 설정하지 않음
도움이 되는 친구 여러분, 직접 디버깅해 보세요. 전체 레코드는 ASP를 사용하여 검색되고 SESSION에 저장됩니다. 물론, 전체 레코드를 SESSION에서 검색하려면 시간이 많이 걸립니다. 저장 프로시저, 총 페이지 수를 기록하고 반환하는 것도 가능합니다. 다음은 코드입니다.
--총 레코드 수 가져오기--
SET @tmpSQL='SELECT @getRecordCounts=COUNT('+@strKeyField+') FROM '+@strTable+@tmpWhere
EXEC sp_executesql @tmpSQL,N'@getRecordCounts int 출력',@getRecordCounts OUTPUT
--총 페이지 수를 가져옵니다--
SET @tempFolatNumber=@getRecordCounts%@IntPageSize
IF @getRecordCounts<=@IntPageSize
SET @getPageCounts=1
또 다른
시작하다
IF @tempFolatNumber != 0
SET @getPageCounts=(@getRecordCounts/@IntPageSize)+1
또 다른
SET @getPageCounts=(@getRecordCounts/@IntPageSize)
끝
정의 매개변수를 반환하는 것을 잊지 마세요:
@getRecordCounts int 출력,--총 레코드 반환
@getPageCounts int 출력--총 페이지 수를 반환합니다.