PDA

View Full Version : ایجاد صفحه بندی



sadaf_
شنبه 06 اسفند 1390, 10:05 صبح
سلام
من کوئری های سنگینی دارم که رکوردهای اون از مرز 65000 و 93000 رد شده
و دنبال راهکارهای سریع هستم یکی از دوستان این روش رو پیشنهاد کردن می خواستم ببینم روش خوبیه یا نه؟
آیا نیازی به اصلاح داره یا نه ؟

[QUOTE=sadaf_;1450711]
create PROCEDURE [dbo].[sp_PagedItem]
(@Page int,@RecsPerPage int)
AS
CREATE TABLE #TempItems
(
ID intIDENTITY,
,,,)
INSERT
INTO #TempItems
(,,)
SELECT,,FROM myTable
DECLARE
FirstRec int, @LastRec int
SELECT
@FirstRec =(@Page - 1)* @RecsPerPage
SELECT
@LastRec =(@Page * @RecsPerPage + 1)
SELECT
*,MoreRecords
=(SELECTCOUNT(*)
FROM #TempItems TI
WHERE TI.ID >= @LastRec
)
FROM
#TempItems
WHERE
ID > @FirstRec AND ID < @LastRec

Galawij
شنبه 06 اسفند 1390, 10:16 صبح
استفاده از جداول Template به خودی خود روی سرعت تأثیر می ذاره. وقتی خود SQL برای این کار راه حل داره چرا مسئله را دور می زنید!!
یک نمونه از Paging:
ALTERPROCEDURE [dbo].[SPS_Labs](@PageNumber SMALLINT,@PageSize SMALLINT)
SELECT*
FROM(
SELECTROW_NUMBER()over (ORDERBY IdLab)AS RowNum,IdLab, LabName, Manager, LabPhone, LabAddress, LabFax, WebSite
FROM dbo.TbLabs
)Result WHERE (RowNum >@PageSize *(@pageNumber - 1)AND RowNum <=(@PageSize * @pageNumber))

sadaf_
شنبه 06 اسفند 1390, 10:37 صبح
عالی بود ممنون
حالا من چطوری می تونم بفهمم که بزرگترین رکورد و آخرین صفحه چه عددی می باشد؟

Galawij
شنبه 06 اسفند 1390, 10:51 صبح
حالا من چطوری می تونم بفهمم که بزرگترین رکورد و آخرین صفحه چه عددی می باشد؟
برای اینکه بزرگترین رکورد را به دست بیارید (روال های با پارامتر خروجی):

SELECT @RowCount=(SELECTcount(IdLab)
FROM dbo.TbLabs)

فراخوانی روال:

(@PageNumber SMALLINT,@PageSize SMALLINT,@RowCount BIGINT OUTPUT

فرض کنید جدول شما دارای 100 رکورد هست(خروجی دستور بالا) و قصد دارید گرید را 5 تا 5 تا نشان بدید: 100/5=20در نتیجه 20 تا صفحه دارید.
بهتره نوع داده پارامترها را هم از smallint به int و یا bigint تغییر بدید.

baktash.n81@gmail.com
یک شنبه 07 اسفند 1390, 07:40 صبح
سلام

البته به زودی خود SQL هم اینکارو انجام می ده ... در نسخه Denali

SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
ORDER BY BusinessEntityID
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY