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