Реализация подкачки в хранимых процедурах
Автор:Eve Cole
Время обновления:2009-07-01 15:55:30
Я не очень опытный программист, поэтому во время проекта я столкнусь со многими проблемами. Использование подкачки в базе данных — одна из проблем, с которыми я столкнулся во время проекта. Я проверил много информации из Интернета, и существует множество методов. Но я думаю, что создание временной таблицы данных — это самый простой метод. Когда я работал над расширением Membership, я обнаружил, что Microsoft также использует его таким же образом. Вы можете просто открыть хранимую процедуру Membership и посмотреть.
Больше говорить бесполезно, просто посмотрите на код и все станет ясно, хаха.
1СОЗДАНИЕ ПРОЦЕДУРЫ dbo.CreateSimple
2(
3 @PageIndex целое,
4 @PageSize целое
5)
6АС
7НАЧАЛО
8 --Определите три переменные:
9 -- @PageLowerBound: нижний предел извлекаемых записей.
10 -- @PageUpperBound: верхний предел извлекаемых записей.
11 -- @TotalRecords: возвращает общее количество записей, в основном используемых для вычислений страниц.
12 ОБЪЯВИТЬ @PageLowerBound int
13 ОБЪЯВИТЬ @PageUpperBound int
14 ОБЪЯВИТЬ @TotalRecords int
15
16 -- Рассчитайте значения верхнего и нижнего пределов.
17 SET @PageLowerBound=@PageIndex * @PageSize
18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
19
20-Создать временную таблицу:
21 — IndexId является идентификатором и автоматически увеличивается на 1;
22--SimpleId заполняется таблицей данных [Simple];
23 СОЗДАТЬ ТАБЛИЦУ #PageIndexForSimple
двадцать четыре (
25 IndexId intidentity(0,1) НЕ НУЛЬ,
26 SimpleId целое число
27)
28--Заполнение временной таблицы
29 INSERT INTO #PageIndexForSimple(SimpleId)
30 SELECT s.[SimpleId]
31 ОТ [Простой] с
32 --Здесь можно добавить условие WHERE и операторы ODER BY.
33
34 -- Получить общее количество записей. Фактически количество затронутых строк равно общему количеству записей.
35 ВЫБЕРИТЕ @TotalRecords=@@ROWCOUNT
36
37 --Получаем нужную нам запись.
38 ВЫБОР с.*
39 FROM [Simple] s,#PageIndexForSimple p
40 ГДЕ s.[SimpleId]=p.[SimpleId]
41 И p.[IndexId]>=@PageLowerBound
42 И P.[IndexId]< =@PageUpperBound
43 ПОРЯДОК ПО с.[Простой]
44
45 -- Возвращает общее количество записей.
46 РЕТЮР @TotalRecords
47END Вы можете понять это из комментариев выше. Ха-ха, теперь, когда я написал это здесь, напишите также код программы:
1Публичный список<Simple> GetSimple(int pageIndex,int pageIndex,out int totalRecords){
2 List<Simple>entity=new List<Simple>();
3 SqlParameter[]param=новый SqlParameter[]{
4 новых SqlParameter("@PageIndex",SqlDbType.Int),
5 новых SqlParameter("@PageSize",SqlDbType.Int),
6 новых SqlParameter("@ReturnValue",SqlDbType.Int),
7};
8 параметр[0].Value=pageIndex;
9 параметр[1].Value=pageSize;
10 param[2].Direction = ПараметрDirection.ReturnValue;
11 SqlDataReader Reader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", param);
12 Пока(reader.Read()){
13entity.Add(GetSimpleEntity(читатель))
14}
15 читатель.Закрыть();
16 попыток{
17 totalRecords=(int)param[2].Value;
18 }поймать{}
19 возвратный объект;
20} Некоторые из вышеперечисленных функций были написаны мной:
Класс SqlHelper: упрощенный класс запросов к базе данных.
GetSimpleEntity (читатель SqlDataReader): поскольку в проектах часто используется получение базовых классов сущностей, для повторного использования пишется отдельная приватная функция;
Стоит отметить, что при получении общего количества записей тип может быть DbNull, что приводит к ошибке.
http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html