|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
Table Paging (Продвинутый) |
|
Дата:
|
15 August 2008 |
|
Описание: |
процедура которая позволяет выводить данные из таблицы постранично, в отличие от предыдущих вариантов добавлена возможность делать выборку из любых таблиц, а также применять различные уловия для выборки. Есть возможность указать любое поле в качестве ключевого
|
| |
Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения
следующую строку:
[CODEPOST ID=235]Table Paging (Продвинутый)[/CODEPOST] |
| Оценка: |
Проголосовало 2 посетителей, средняя оценка 5.00 |
| Оценить: |
|
1 /*
2 Процедура возможно не будет работать на SQL2000, тестировалась на SQLExpress2005
3 */
4 alter PROCEDURE [dbo].[GetPageEx]
5 (
6 @TableName sysname, -- Имя таблицы --varchar(128)
7 @IdFieldName sysname, -- Имя ключевого поля
8 @pagesize int, -- размер страницы (строк)
9 @page int, -- номер выводимой страницы
10 @PageCount int out -- количество страниц в таблице
11 )
12 AS
13 SET NOCOUNT ON
14
15 declare @sql nvarchar(4000)
16 declare @ParmDefinition nvarchar(256)
17 DECLARE @id int, @recordcount int, @FirstRec int
18
19 IF (@page = 0) SET @page=1
20
21 set @sql = N' SELECT @recordcount = count(*)
22 FROM ' + @tableName
23 SET @ParmDefinition = N'@recordcount int OUTPUT';
24 exec sp_executesql @sql, @ParmDefinition, @recordcount OUTPUT;
25
26
27 set @FirstRec = (@page) * @pagesize
28
29 if (@FirstRec<=@recordcount)
30 begin
31
32
33 set @sql = '
34 SET ROWCOUNT ' + cast(@FirstRec as varchar(32)) +
35
36 ' select @id = ' + @IdFieldName +
37 ' FROM ' + @TableName +
38 ' order by ' + @IdFieldName + ' asc
39 '
40 SET @ParmDefinition = N'@id int OUTPUT';
41 exec sp_executesql @sql, @ParmDefinition, @id OUTPUT;
42
43
44 set @sql = '
45 SET ROWCOUNT ' + cast(@pagesize as varchar(32)) +
46
47 ' SELECT *
48 FROM ' + @TableName +
49 ' WHERE ' + @IdFieldName + ' <= ' + cast(@id as varchar(32)) +
50 ' Order by ' + @IdFieldName + ' desc '
51
52 exec sp_executesql @sql
53 end
54
55 set @PageCount = CEILING(@recordcount / cast(@pagesize as real))
56
57
58
59 /*
60 -- примеры вызова
61
62 -- 1 вариант (передача в качестве параметра имени таблицы, и ключевого поля)
63 declare @cntPages int
64 exec dbo.[GetPageEx] clients, 'id', 5, 1, @cntPages OUTPUT
65 select @cntPages
66
67 -- 2 вариант (можно также передать произвольную выборку в след виде "( SelectInstruction ) t" )
68 exec dbo.[GetPageEx] '(Select * From clients where clientcode = 7) t' , 'id', 5, 2, 1
69
70 */
71
72
73 |
| Вернуться к списку исходников в категории ADO.NET |
|
|
 |
 |
 |
 |
|
|