古詩詞大全網 - 成語經典 - SQL如何實現數據分頁,要具體語句,謝謝

SQL如何實現數據分頁,要具體語句,謝謝

可以的,用存儲過程

分頁存儲過程如下

CREATE PROCEDURE GetRecordFromPage

@tblName varchar(255), -- 表名

@RetColumns varchar(1000) = '*', -- 需要返回的列,默認為全部

@Orderfld varchar(255), -- 排序字段名

@PageSize int = 10, -- 頁尺寸

@PageIndex int = 1, -- 頁碼

@IsCount bit = 0, -- 返回記錄總數, 非 0 值則返回

@OrderType varchar(50) = 'asc', -- 設置排序類型, 非 asc 值則降序

@strWhere varchar(1000) = '' -- 查詢條件 (註意: 不要加 where)

AS

declare @strSQL varchar(1000) -- 主語句

declare @strTmp varchar(300) -- 臨時變量

declare @strOrder varchar(400) -- 排序類型

if @IsCount != 0 --執行總數統計

begin

if @strWhere != ''

set @strSQL = "select count(*) as Total from [" + @tblName + "] where " + @strWhere

else

set @strSQL = "select count(*) as Total from [" + @tblName + "]"

end

else --執行查詢操作

begin

if @OrderType != 'asc'

begin

set @strTmp = "<(select min"

set @strOrder = " order by [" + @Orderfld +"] desc"

end

else

begin

set @strTmp = ">(select max"

set @strOrder = " order by [" + @Orderfld +"] asc"

end

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["

+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["

+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["

+ @Orderfld + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"

+ @strOrder

if @strWhere != ''

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["

+ @tblName + "] where [" + @Orderfld + "]" + @strTmp + "(["

+ @Orderfld + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["

+ @Orderfld + "] from [" + @tblName + "] where (" + @strWhere + ") "

+ @strOrder + ") as tblTmp) and (" + @strWhere + ") " + @strOrder

if @PageIndex = 1

begin

set @strTmp = ""

if @strWhere != ''

set @strTmp = " where (" + @strWhere + ")"

set @strSQL = "select top " + str(@PageSize) + " " + @RetColumns + " from ["

+ @tblName + "]" + @strTmp + " " + @strOrder

end

end

exec (@strSQL)