Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

qsmart

 
Название:

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
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта