当前位置: 代码迷 >> Sql Server >> 求写一个关于分页的sql话语
  详细解决方案

求写一个关于分页的sql话语

热度:69   发布时间:2016-04-27 10:44:06.0
求写一个关于分页的sql语句
本来是想这样写的,可是写了好久一直写不下去,求助
SQL code
and([email protected]+'<(select min([email protected]+') from(select top '+str((@currentpage-1)[email protected])[email protected]+',moduleid from Modules)as tab)or [email protected]+'=(select min([email protected]+') from(select top '+str((@currentpage-1)[email protected])[email protected]+',moduleid from Modules)as tab2)          and moduleid<这里写不下去了 )

就是想实现where numtime>取出来的numtime or (numtime=取出来的numtime and 主键moduleid>取出来的主键值)。
网上的分页都是以主键进行的不能有重复值,我numtime是有重复的,想以这个作为排序字段。

------解决方案--------------------

USE tempdb
go

IF OBJECT_ID('tempdb..#tb') IS NOT NULL
DROP TABLE #tb 
CREATE TABLE #tb(id INT)

INSERT INTO #tb
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7

DECLARE @PageIndex int
DECLARE @PageNumber int
DECLARE @AscendingField varchar(50)
SET @PageIndex=2 --选择页码
SET @PageNumber=2 --每页出现的记录数
SET @AscendingField = 'id' --结果集中的排序字段

[email protected],可从网上copy下来后改写
DECLARE @exec NVARCHAR(500)
SET @exec=
N'
;WITH c1 AS
(
SELECT ROW_NUMBER() OVER(ORDER BY @AscendingField) row_numberId, id
FROM #tb
)
SELECT id
FROM c1
WHERE row_numberid>(@PageIndex-1)[email protected] 
and row_numberid<@[email protected]+1'

SET @exec = REPLACE(@exec, [email protected]', @AscendingField)
SET @exec = REPLACE(@exec, [email protected]', @PageIndex)
SET @exec = REPLACE(@exec, [email protected]', @PageNumber)

EXEC SP_EXECUTESQL @exec

---试试看这个能不能满足你的要求!

写了一个例子,具体的代码你还需要进行修改,如果是SQL2000需要把ROW_Number换成IDENTITY(1,1)进行自增。

  相关解决方案