webForumDet fria alternativet

sp paging + order by

0 svar · 153 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

Har modifierat exemplet som heter Row Count från http://www.aspfaq.com/show.asp?id=2120
Om jag har order by p.IDno så funkar scriptet men jag vill sortera på p.Projectname, då blir det galet.
Det som händer är att vissa poster kan dyka upp flera gånger på olika sidor, nån som kan förklara varför?

CREATE PROCEDURE dbo.up_iD_ProjectPaging
@pagenum int, 
@perpage int,
@Sortcolumn int,
@Sortorder int,
@Categoryid int,
@Active int
AS 
BEGIN 
	SET NOCOUNT ON 
	 
	--räknar ut hur många poster samt sidor det finns
	DECLARE 
		@ubound INT, 
		@lbound INT, 
		@pages INT, 
		@rows INT 
	 
	SELECT 
		@rows = COUNT(*), 
		@pages = COUNT(*) / @perpage 
	FROM 
		iD_Project WITH (NOLOCK) 
	WHERE
		coalesce(@Categoryid, CategoryIDno) = CategoryIDno And
		coalesce(@Active, Active) = Active
	 
	IF @rows % @perpage != 0 SET @pages = @pages + 1 
	IF @pagenum < 1 SET @pagenum = 1 
	IF @pagenum > @pages SET @pagenum = @pages 
	 
	SET @ubound = @perpage * @pagenum  
	SET @lbound = @ubound - (@perpage - 1)  
	 

	--hämtar aktuell sida, antal poster per sida samt totalt antal poster
	SELECT 
		CurrentPage = @pagenum, 
		TotalPages = @pages, 
		TotalRows = @rows 
	 

	--hämtar alla poster
	DECLARE
		@IDno varchar(20),
		@Projectname varchar(200),
		@CreateDate datetime

	SET ROWCOUNT @lbound

	SELECT 
		@IDno = p.IDno, @Projectname = p.Projectname, @CreateDate = p.CreateDate

	FROM 
		iD_Project p WITH (NOLOCK) 
	WHERE
		coalesce(@Categoryid, p.CategoryIDno) = p.CategoryIDno And
		coalesce(@Active, p.Active) = p.Active
	ORDER BY 
		[b]p.Projectname[/b]

	--hämtar poster ur selectsatsen ovan beroende på vilken sida man är på
	SET ROWCOUNT @perPage 

	SELECT 
		 p.IDno, p.CategoryIDno, p.Projectname, p.Active, p.Discussion,
		(Select Min(Startdate) From iD_ProjectCase Where ProjectIDno = p.IDno), 
		(Select Max(Enddate) From iD_ProjectCase Where ProjectIDno = p.IDno), 
		pr.Firstname + ' ' + pr.Lastname As Fullname, p.CreateDate,
		(Select Count(*) From iD_ProjectCase  Where ProjectIDno = p.IDno) -
		(Select Sum(Cast(Closed as int)) From iD_ProjectCase  Where ProjectIDno = p.IDno) as Closed
	FROM 
		iD_Project p WITH (NOLOCK) 
	INNER JOIN 
		Profile pr On p.CreateBy = pr.IDno
	WHERE 
		coalesce(@Categoryid, p.CategoryIDno) = p.CategoryIDno And
		coalesce(@Active, p.Active) = p.Active and
		cast(p.IDno as varchar(20)) + '~' + p.Projectname
		>= @IDno + '~' + @Projectname
	Order By 
		[b]p.Projectname[/b]
		
	
	SET ROWCOUNT 0 
END

GO
129 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)