• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

این پروسیجر من چرا جواب نمیده ؟

yavari

کاربر تازه وارد
تاریخ عضویت
17 ژوئن 2006
نوشته‌ها
167
لایک‌ها
0
سلام

این پروسیجر من چرا جواب نمیده ؟ :( :( :(

کد:
CREATE PROCEDURE dbo.procGetPagedAllUseres
(
    @CurrentPage int,
    @PageSize int,
    @TotalRecords int output
)
AS

SET NOCOUNT ON

--Create variable to identify the first and last record that should be selected
DECLARE @FirstRec int, @LastRec int
SELECT @FirstRec = (@CurrentPage - 1) * @PageSize
SELECT @LastRec = (@CurrentPage * @PageSize + 1)
--Select one page of data based on the record numbers above
SELECT *
FROM 
Useres
WHERE 
Radif > @FirstRec 
AND
Radif < @LastRec
--Return the total number of records available as an output parameter
SELECT @TotalRecords = COUNT(*) FROM Useres
GO
 

Parham

Registered User
تاریخ عضویت
24 سپتامبر 2003
نوشته‌ها
1,042
لایک‌ها
2
خوب چه جوابی نمیده؟ چه جوابی باید بده؟! مشکلتون دقیقا چیه؟
 

mehdivk

Registered User
تاریخ عضویت
5 آپریل 2006
نوشته‌ها
319
لایک‌ها
0
این SP که شما نوشتید میتونه کار بکنه و هم میتونه کار نکنه . که برای شما کار نمیکنه . میدونید دلیلش چیه .

در شرط SELECT را نگاه کنید . شما ستون Radif را دارید با دو مقدار FirstRec و LastRec مقایسه می کنید. این تنها در صورتی جواب میده که ستون
Radif شما از 1 شروع بشه و به ترتیب بره جلو و این وسط هیچ چیزی کم نشه . با این سیستم اگه جدول من ستون Radif از 1000 شروع بشه مشخصا برای
رکورد های 1000 تا 1010 که یک Paging در هر صفحه 10 را نمایش می دهد باید صفحه 1000 را درخواست کنم در حالیکه درست این است که این 10 رکورد 1000 تا 1010
در صفحه اول نشان داده شوند چون اولین رکورد های پايگاه داده من محسوب می شوند . امیدوارم منظور من را متوجه شده باشید . شما برای این که این مشکل را حل کنید باید در هنگام
SELECT کردن یک ستون به نام مثلا RowID به این جدول اضافه کنید و آن باید از یک شروع بشه و شرط را باید این بار با RowID و دو مقدار اول و آخر بررسی نمائید نه با Radif

این کار را میتونید به شکل زیر انجام دهید :​

کد:
CREATE PROCEDUTE dbo.procGetPagedAllUseres
(
    @CurrentPage int,
    @PageSize int,
    @TotalRecords int output
)
AS

	SET NOCOUNT ON

	DECLATE @FirstRec int;
	SET @FirstRec = (@CurrentPage-1)*PageSize + 1;
	
	DECLARE @LastRec int;
	SET @LastRec = (@CurrentPage)*PageSize;

	CREATE TABLE #Temp
		(
			RowID int IDENTITY PRIMARY KEY,
			UserID int
		)
	INSERT INTO #Temp(UserID)
			SELECT UserID FROM Users
	
	SELECT
		*
	FROM
		Users
	WHERE
		UserID IN (SELECT UserID FROM #Temp WHERE RowID >= @FirstRec AND RowID <= @LastRec)

	SELECT @TotalRecords = COUNT(*) FROM #Temp;
	

	GO
 
بالا