Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 13:25 24.06.24 
Клубове/ Компютри и Интернет / Бази данни Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема Re: Въпрос [re: Tъп]
АвторLQS (Нерегистриран) 
Публикувано07.02.02 12:45  



Относно "странирането" на данни

1. Пример с ADO страниране
2. Пример със Stored procedure на MsSQL Server
3. Transact-SQL server cursor

=====================================

1. Пример с ADO страниране
Това за което Иво говори (PageSize, AbsolutePage, PageCount) такива примери има на:

Database Paged Search
http://www.asp101.com/samples/db_paged_search.asp

Database Paging
http://www.asp101.com/samples/db_paging.asp

е вярно примерите са на ASP и базата от данни е Access, но може да се ползва начина.
=====================================
2. Примрер със Stored procedure на MsSQL Server

Примера е от книгата Active Server Pages 3.0 на Wrox Press, преведена на бълг. от издателство "Софт Прес" (това не е реклама :)).
На стр. 537 Глава 10, има "Използване на SQL Server за страниране на набор от записи" - и там си е обяснено подробно каква логика ползват.

С 2 думи правят следното:
а) в stored procedure създават временна таблица #PagedAuthors с колона ID от тип int и свойство identity
това им гарантира уникалност на всеки ред (естествено :))
б) insert into #PagedAuthors .... select from "истинската таблица" where .....
с тази заявка прехвърлят нужните данни във "временната" таблица
в) калкулират общ брой на страници
г) за да се изберат записи само от търсената страница се изчислява ID-то на началния ред, и ID-то на крайния ред за търсената страница
д) записите от "страницата" изчислена в г) се предават на клиента
е) временната таблица се унищожава

а и на края - процедурата се вика с
@iPage -- номер на "страницата" която да се предаде към клиента
@iPageSize -- брой записи в "страница"
exec usp_PagedAuthors 2, 5 -- втора страница, на всяка страница по 5 реда








ето и процедурата - примера работа с база от данни pubs
------------------------------------------------------
CREATE PROCEDURE usp_PagedAuthors
@iPage int,
@iPageSize int
AS
BEGIN
-- disable row counts
SET NOCOUNT ON

-- declare variables
DECLARE @iStart int -- start record
DECLARE @iEnd int -- end record
DECLARE @iPageCount int -- total number of pages

-- create the temporary table
CREATE TABLE #PagedAuthors
(
ID int IDENTITY,
au_id varchar(11) NOT NULL ,
au_lname varchar(40) NOT NULL ,
au_fname varchar(20) NOT NULL ,
phone char(12) NOT NULL ,
address varchar(40) NULL ,
city varchar(20) NULL ,
state char(2) NULL ,
zip char(5) NULL ,
contract bit NOT NULL
)

-- populate the temporary table
INSERT INTO #PagedAuthors (au_id, au_lname, au_fname,
phone, address, city, state, zip, contract)
SELECT au_id, au_lname, au_fname,
phone, address, city, state, zip, contract
FROM authors


-- work out how many pages there are in total
SELECT @iPageCount = COUNT(*)
FROM authors

SELECT @iPageCount = CEILING(@iPageCount / @iPageSize) + 1

-- check the page number
IF @iPage < 1
SELECT @iPage = 1

IF @iPage > @iPageCount
SELECT @iPage = @iPageCount

-- calculate the start and end records
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1

-- select only those records that fall within our page
SELECT au_id, au_lname, au_fname,
phone, address, city, state, zip, contract
FROM #PagedAuthors
WHERE ID > @iStart
AND ID < @iEnd


DROP TABLE #PagedAuthors

-- turn back on record counts
SET NOCOUNT OFF

-- Return the number of records left
RETURN @iPageCount
END
------------------------------------------------------


=====================================
3. Transact-SQL server cursor
Доколкото съм чул MsSQL Server е слаб в процедурната си логика.
Може би затова Microsoft не препоръчва ползването на курсори???

Според мен просто трябва да се преценят (или тестват) различните начини.

Например:
Струва ми се, че ако се ползва Server cursor, това ще доведе до по-голям overhead на SQL Server-а, отколкото ако го караме да прави временни таблици. Знае ли човек? :)



Цялата тема
ТемаАвторПубликувано
* Въпрос Tъп   06.02.02 08:49
. * Re: Въпрос Zyl_Oiliuff   06.02.02 11:25
. * Re: Въпрос Tъп   06.02.02 17:34
. * Re: Въпрос Zyl_Oiliuff   06.02.02 18:58
. * Re: Въпрос Tъп   06.02.02 19:04
. * Re: Въпрос Zyl_Oiliuff   07.02.02 11:19
. * Re: Въпрос lvo   06.02.02 12:27
. * Re: Въпрос Tъп   06.02.02 17:45
. * Re: Въпрос seeker   07.02.02 00:08
. * Re: Въпрос lvo   07.02.02 09:09
. * Re: Въпрос LQS   07.02.02 12:45
. * Благодаря !!! Tъп   08.02.02 00:24
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.