СОЗДАТЬ ПРОЦЕДУРУ GoalerPageSp
@IntPageSize целое число,
@IntCurrPage int,
@strFields nvarchar(2000),
@strTable varchar(200),
@strWhere varchar(800),
@strOrderType varchar(200),
@strKeyField varchar(50)
КАК
УСТАНОВИТЬ NOCOUNT ON
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)
--Установить условия--
ЕСЛИ @strWhere IS NULL ИЛИ RTRIM(@strWhere)=''
НАЧАЛО – нет условий запроса.
SET @tmpWhere=''
SET @tmpAndWhere=''
КОНЕЦ
ЕЩЕ
НАЧАЛО — есть условия запроса.
SET @tmpWhere=' ГДЕ '+@strWhere
SET @tmpAndWhere=' И '+@strWhere
КОНЕЦ
--Установить сортировку--
ЕСЛИ @strOrderType != 0
НАЧАЛО – обратный порядок
SET @tmpD_X = '<'
SET @tmpMin_MAX = 'МИН'
SET @tmpOrder=' ORDER BY ' +@strKeyField+ ' DESC'
КОНЕЦ
ЕЩЕ
НАЧИНАТЬ
SET @tmpD_X = '>'
SET @tmpMin_MAX = 'МАКС'
SET @tmpOrder=' ORDER BY ' +@strKeyField+ 'ASC'
КОНЕЦ
--SQL-запрос--
ЕСЛИ @IntCurrPage=1
Set @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 (SELECT TOP '+CAST(@IntPageSize*(@IntCurrPage-1) AS VARCHAR)+' '+@strKeyField+' FROM '+@strTable+' '+@tmpWhere+' '+@tmpOrder+') AS T))'+@tmpAndWhere+' ' +@tmpOrder
ИСПОЛНИТЕЛЬ(@tmpSQL)
ИДТИ
Метод вызова:
Интпажесизе=20
strTable= [TableName] 'Имя таблицы данных
strFields= Field1,Field2,Field3,Field4 'Имена столбцов, которые нужно прочитать
strKeyField=Field1'первичный ключ: здесь предполагается, что Field1 является первичным ключом.
strWhere='Условие: FieldA='b'
strOrderType=1'Метод сортировки: 1 — обратный порядок, 0 — последовательный порядок.
CurrPage=Request.QueryString(Страница)
ЕСЛИ(CurrPage<> И Isnumeric(CurrPage))THEN
CurrPage=CLNG(CurrPage)
ЕСЛИ(CurrPage<1)THEN CurrPage=1
ЕЩЕ
КуррПейдж=1
КОНЕЦ ЕСЛИ
ЕСЛИ стрГде<> ТО
tmpWhere= ГДЕ &strWhere
ЕЩЕ
tmpWhere=
КОНЕЦ ЕСЛИ
ЕСЛИ(СЕССИЯ(RecCount)<>)ТО
ЕСЛИ(СЕССИЯ(strWhere)<>strWhere)THEN
RecCount=Conn.Execute(SELECT COUNT(&strKeyField&) FROM &strTable&tmpWhere)(0)
СЕССИЯ(RecCount)=RecCount
СЕССИЯ(strWhere)=strWhere
ЕЩЕ
RecCount=СЕССИЯ(RecCount)
КОНЕЦ ЕСЛИ
ЕЩЕ
RecCount=Conn.Execute(SELECT COUNT(*) FROM &strTable&tmpWhere)(0)
СЕССИЯ(RecCount)=RecCount
СЕССИЯ(strWhere)=strWhere
КОНЕЦ ЕСЛИ
IF(RecCount MOD IntPageSize <>0)THEN
IntPageCount=INT(RecCount/IntPageSize)+1
ЕЩЕ
IntPageCount=RecCount/IntPageSize
КОНЕЦ ЕСЛИ
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)
УСТАНОВИТЬ RS=Cmd.Выполнить()
ЕСЛИ RecCount<1 ТО
Response.Write(нет записи)
ЕЩЕ
GetRecord=RS.GetRows(IntPageSize)
Для i=0 к Ubound(GetRecord,2)
Response.Write(GetRecord(0,i),GetRecord(1,i),GetRecord(2,i))'...выходное содержимое
СЛЕДУЮЩИЙ
GetRecord=Ноль
КОНЕЦ ЕСЛИ
УСТАНОВИТЬ RS=НИЧЕГО
Полезные друзья, пожалуйста, отладьте это самостоятельно. Общее количество записей извлекается с помощью ASP и сохраняется в SESSION. Если вы подсчитываете общее количество записей каждый раз, это займет очень много времени. Конечно, если вы хотите получить общее количество записей в файле SESSION. хранимая процедура. Также можно записать и вернуть общее количество страниц. Ниже приведен код:
--Получить общее количество записей--
SET @tmpSQL='SELECT @getRecordCounts=COUNT('+@strKeyField+') FROM '+@strTable+@tmpWhere
EXEC sp_executesql @tmpSQL,N'@getRecordCounts int output',@getRecordCounts OUTPUT
--Получить общее количество страниц--
SET @tempFolatNumber=@getRecordCounts%@IntPageSize
ЕСЛИ @getRecordCounts<=@IntPageSize
ЗАДАТЬ @getPageCounts=1
ЕЩЕ
НАЧИНАТЬ
ЕСЛИ @tempFolatNumber != 0
SET @getPageCounts=(@getRecordCounts/@IntPageSize)+1
ЕЩЕ
SET @getPageCounts=(@getRecordCounts/@IntPageSize)
КОНЕЦ
Не забудьте вернуть параметры определения:
@getRecordCounts int output, -- Возвращает общее количество записей
@getPageCounts int output — возвращает общее количество страниц.