當前位置:首頁 » 存儲配置 » sql分頁存儲

sql分頁存儲

發布時間: 2022-11-12 12:06:24

sql 存儲過程分頁(asp.net)

------------------------------------
--用途:分頁存儲過程
--說明:
------------------------------------
Create
PROCEDURE
[dbo].[UP_GetRecordByPage]
@tblName
varchar(255),
--
表名
@fldName
varchar(255),
--
排序欄位名
@PageSize
int
=
10,
--
頁尺寸
@PageIndex
int
=
1,
--
頁碼
@IsReCount
bit
=
0,
--
返回記錄總數,

0
值則返回
@OrderType
bit
=
0,
--
設置排序類型,

0
值則降序
@strWhere
varchar(1000)
=
'1=1'
--
查詢條件
(注意:
不要加
where)
AS
declare
@begin
int
,@end
int,@sql
varchar(4000),@order
varchar(5)
set
@begin=@PageSize*
(@PageIndex-1)
+1
set
@end=@begin+@PageSize-1
set
@order=''
if(@OrderType=1)
set
@order='
desc'
set
@sql='
select
*
from
(
select
ROW_NUMBER()
over(order
by
'
+
@fldName
+
@order
+'
)
as
od,
*
from
'+@tblName
+'
where
'
+
@strWhere
+
')
as
tbl
where
od
between
'
+
rtrim(ltrim(str(@begin)))+'
and
'
+
rtrim(ltrim(str(@end)))
exec
(@sql)
if(@IsReCount=1)
exec('select
count(*)
from
'+
@tblName+'
where
'
+@strWhere)
我們老師給我們的.....

⑵ 多參數(條件)的分頁存儲過程 或 sql 語句

lz不是吧,答案不都有了嗎?你想在加條件
分頁的sql語句sum
每頁顯示的信息條數num
顯示第幾頁select
top
sum
*
from
表名
t
where
t.id
not
in
(select
id
top
(sum
*(num
-1))id
from
表名)
and
t.欄位名
=
「變數」
and
....

⑶ 求一個sql存儲過程分頁。支持多表聯合查詢,模糊查詢!

可以加個游標 使用更方便

@PageCount bigint output,--總頁數
@Pages bigint output --當前頁
as
if @Pages<=0 --判斷頁數
set @Pages=1
declare @指針定位 bigint
set @指針定位=9*(@Pages-1)--這個是每頁10條

declare @hid bigint,--獲取定位Id 主要是用自增值判斷的
@余數 bigint--存余數 這個余數是 記錄數/10 餘下的數

select @PageCount=count(*) from [表] where [Id] = @Id
set @余數=@PageCount%10 --這里的@PageCount 是記錄總數
if @余數>0
set @PageCount=@PageCount/10+1 --這里的@PageCount是總頁數
else
set @PageCount=@PageCount/5 --這里的@PageCount是總頁數
if @Pages>@PageCount --@Pages是當前頁
set @Pages=@PageCount

declare mycur scroll cursor for
select [Id] from [表] where [Id] = @Id
open mycur
fetch absolute @指針定位 from mycur into @hid --@hid獲取定位Id
if @hid is null
set @hid=0

SELECT TOP 10 * --這里的10 是指 頁數大小
FROM 表
WHERE (Id NOT IN --------在where後面 可以加條件 如where [列1]=2 and (Id NOT IN-----
(SELECT TOP (@hid) Id
FROM 表
ORDER BY Id))
ORDER BY Id
--上面的是我根據下面的 自己改的 我也不確定速度快否 也請高手看看 不過挺好用--

SELECT TOP 頁大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP (頁大小*(頁數-1)) id
FROM 表
ORDER BY id))
ORDER BY ID
這是我自己整理的 你仔細看看 很好用的

⑷ SQL server 2008 存儲過程分頁實現,怎麼提升效率

創建存儲過程: create proc procPaging ( @tablename nvarchar(100), --表名 @column nvarchar(100)=null, --列名 @sort nvarchar(10), --排序asc,desc) @pageIndex int, --當前頁碼 @pageCount int --每頁顯示多少條數據 ) as begin declare @strSql nvarchar(max) set @strSql='select * from (select ROW_NUMBER() over(order by '+@column+''+@sort+' ) as rowid,* from '+@tablename+') newtable where rowid between '+ cast((@pageindex-1)*@pagecount+1 as nvarchar(100))+' and '+convert(varchar(20),@pageIndex*@pageCount) exec (@strSql) --執行字元串的SQL語句 end 執行存儲過程: exec procPaging 'BookShop_BookType','BookType_ID','asc',1,3 exec procPaging 'BookShop_BookType','BookType_ID','asc',2,3 刪除存儲過程: drop proc book_Paging

⑸ Sql server2008怎樣分頁

你可以用存儲過程分頁,如下存儲過程支持分頁和排序:

CREATE PROCEDURE GetSortedMovies
(
@SortExpression NVarChar(100),
@StartRowIndex INT,
@MaximumRows INT
)
AS

-- 創建一個臨時表存儲查詢結果
CREATE TABLE #PageIndex
(
IndexId INT IDENTITY (1,1) NOT NULL,
RecordId INT
)
-- 插入臨時表
INSERT INTO #PageIndex (RecordId)
SELECT Id FROM Movies
ORDER BY
CASE WHEN @SortExpression='Id' THEN Id END ASC,
CASE WHEN @SortExpression='Id DESC' THEN Id END DESC,
CASE WHEN @SortExpression='Title' THEN Title END ASC,
CASE WHEN @SortExpression='Title DESC' THEN Title END DESC,
CASE WHEN @SortExpression='Description' THEN Description END ASC,
CASE WHEN @SortExpression='Description DESC' THen Description END DESC

-- 得到頁數
SELECT Id,Title,Description FROM Movies
INNER JOIN #PageIndex WITH (nolock)
ON Movies.Id = #PageIndex.RecordId
WHERE #PageIndex.IndexId > @StartRowIndex
AND #PageIndex.IndexId < (@StartRowIndex + @MaximunRows + 1)
ORDER BY #PageIndex.IndexId

⑹ sql server 分頁存儲過程

CREATE PROCEDURE pagination
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的欄位名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@doCount bit = 0, -- 返回記錄總數, 非 0 值則返回
@OrderType bit = 0, -- 設置排序類型, 非 0 值則降序
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主語句
declare @strTmp varchar(110) -- 臨時變數
declare @strOrder varchar(400) -- 排序類型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere
else
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
--以上代碼的意思是如果@doCount傳遞過來的不是0,就執行總數統計。以下的所有代碼都是@doCount為0的情況
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
--如果@OrderType不是0,就執行降序,這句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder
--如果是第一頁就執行以上代碼,這樣會加快執行速度
end
else
begin
--以下代碼賦予了@strSQL以真正執行的SQL代碼
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + ']
where [' + @fldName + ']' + @strTmp + '(['+ @fldName + '])
from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + ']
from [' + @tblName + ']' + @strOrder + ')
as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + ']
where [' + @fldName + ']' + @strTmp + '([' + @fldName + '])
from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' + @fldName + ']
from [' + @tblName + ']
where ' + @strWhere + ' ' + @strOrder + ')
as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec (@strSQL)
GO

/*
-- 需要傳遞的參數
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的欄位名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@doCount bit = 0, -- 返回記錄總數, 非 0 值則返回
@OrderType bit = 0, -- 設置排序類型, 非 0 值則降序
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
-- 調用測試

exec pagination @tblName='jobs', @strGetFields='job_id,job_desc,min_lvl,max_lvl',
@fldName='job_id',@PageSize=3,@PageIndex=1,
@doCount=0,@OrderType=1,@strWhere=''
*/
============================================

CREATE PROC SP_PageList
@tbname sysname, --要分頁顯示的表名
@FieldKey sysname, --用於定位記錄的主鍵(惟一鍵)欄位,只能是單個欄位
@PageCurrent int=1, --要顯示的頁碼
@PageSize int=10, --每頁的大小(記錄數)
@FieldShow nvarchar(1000)='', --以逗號分隔的要顯示的欄位列表,如果不指定,則顯示所有欄位
@FieldOrder nvarchar(1000)='', --以逗號分隔的排序欄位列表,可以指定在欄位後面指定DESC/ASC
--用於指定排序順序
@Where nvarchar(1000)='', --查詢條件
@RecordCount int OUTPUT, --總記錄數
@PageCount int OUTPUT --總頁數
AS
DECLARE @sql nvarchar(4000)
SET NOCOUNT ON
--檢查對象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'對象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、視圖或者表值函數',1,16,@tbname)
RETURN
END

--分頁欄位檢查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分頁處理需要主鍵(或者惟一鍵)',1,16)
RETURN
END

--其他參數檢查及規范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N''
ELSE
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'

--如果@PageCount為NULL值,則計算總頁數(這樣設計可以只在第一次計算總頁數,以後調用時,把總頁數傳回給存儲過程,避免再次計算總頁數,對於不想計算總頁數的處理而言,可以給@PageCount賦值)
IF @PageCount IS NULL
BEGIN
SET @sql=N'SELECT @PageCount=COUNT(*)'
+N' FROM '+@tbname
+N' '+@Where
EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
SET @RecordCount = @PageCount
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END

--計算分頁顯示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=@PageCurrent*@PageSize

--第一頁直接顯示
IF @PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder)
ELSE
BEGIN
SELECT @PageCurrent=@TopN1,
@sql=N'SELECT @n=@n-1,@s=CASE WHEN @n<'+@TopN
+N' THEN @s+N'',''+QUOTENAME(RTRIM(CAST('+@FieldKey
+N' as varchar(8000))),N'''''''') ELSE N'''' END FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder
SET ROWCOUNT @PageCurrent
EXEC sp_executesql @sql,
N'@n int,@s nvarchar(4000) OUTPUT',
@PageCurrent,@sql OUTPUT
SET ROWCOUNT 0
IF @sql=N''
EXEC(N'SELECT TOP 0'
+N' '+@FieldShow
+N' FROM '+@tbname)
ELSE
BEGIN
SET @sql=STUFF(@sql,1,1,N'')
--執行查詢
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' WHERE '+@FieldKey
+N' IN('+@sql
+N') '+@FieldOrder)
END
END
GO

⑺ sql存儲過程分頁 臨時表問題

sql分頁不一定用存儲過程,就過個人認為存儲過程盡量少用!
--前提是必需有一列是自動增長類型,唯一性

--方法一

SELECT DISTINCT TOP 8 CategoryID
FROM tbl_Proct_Procts
WHERE (UserID = 73) AND (CategoryID >
(SELECT MAX(categoryid)
FROM (SELECT DISTINCT TOP 16 categoryid
FROM tbl_proct_procts where userid=73
ORDER BY categoryid) AS b))
ORDER BY CategoryID

--方法二

select top 10 * from [order details]
where orderid>all(select top 10 orderid from [order details] order by orderid)
order by orderid
下面的來自CSDN-------------------------------------
SQL Server 存儲過程的分頁,這個問題已經討論過幾年了,很多朋友在問我,所以在此發表一下我的觀點
建立表:

CREATE TABLE [TestTable] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

插入數據:(2萬條,用更多的數據測試會明顯一些)
SET IDENTITY_INSERT TestTable ON

declare @i int
set @i=1
while @i<=20000
begin
insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
set @i=@i+1
end

SET IDENTITY_INSERT TestTable OFF

-------------------------------------

分頁方案一:(利用Not In和SELECT TOP分頁)
語句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 20 id
FROM TestTable
ORDER BY id))
ORDER BY ID

SELECT TOP 頁大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 頁大小*頁數 id
FROM 表
ORDER BY id))
ORDER BY ID

-------------------------------------

分頁方案二:(利用ID大於多少和SELECT TOP分頁)
語句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 20 id
FROM TestTable
ORDER BY id) AS T))
ORDER BY ID

SELECT TOP 頁大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 頁大小*頁數 id
FROM 表
ORDER BY id) AS T))
ORDER BY ID

-------------------------------------

分頁方案三:(利用SQL的游標存儲過程分頁)
create procere XiaoZhengGe
@sqlstr nvarchar(4000), --查詢字元串
@currentpage int, --第N頁
@pagesize int --每頁行數
as
set nocount on
declare @P1 int, --P1是游標的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 總頁數--,@rowcount as 總行數,@currentpage as 當前頁
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。
建議優化的時候,加上主鍵和索引,查詢效率會提高。

通過SQL 查詢分析器,顯示比較:我的結論是:
分頁方案二:(利用ID大於多少和SELECT TOP分頁)效率最高,需要拼接SQL語句
分頁方案一:(利用Not In和SELECT TOP分頁) 效率次之,需要拼接SQL語句
分頁方案三:(利用SQL的游標存儲過程分頁) 效率最差,但是最為通用

在實際情況中,要具體分析。

更多的討論見:
http://community.csdn.net/Expert/topic/3292/3292678.xml?temp=.1621515

資料庫sqlserver如何用存儲過程做分頁

存儲過程:create Procere pname
( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分頁:
sqlserver 在2008之前 使用 top 和 not int top 的方式來做分頁
2008以後使用 row_number() 函數作為分頁關鍵函數
2012使用 offset 1 fetch next 10 rows only
你問了2個問題,你可以優先把視圖,存儲過程,觸發器等弄明白,分頁是查詢,在存儲過程里可以寫復雜的sql文,只是在運行時是預編譯和參數化查詢防止sql注入

⑼ 用Sql寫一個分頁查詢的存儲過程 表stuinfo主鍵stuno

隨便你怎麼填!

/****** 對象: StoredProcere [dbo].[usp_DataPagination_v1] 腳本日期: 09/03/2010 16:52:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_DataPagination_v1]
(
@tblName nvarchar(200), ----要顯示的表或多個表的連接
@fldName nvarchar(500) = '*', ----要顯示的欄位列表
@pageSize int = 10, ----每頁顯示的記錄個數
@page int = 1, ----要顯示那一頁的記錄
@pageCount int = 1 output, ----查詢結果分頁後的總頁數
@Counts int = 1 output, ----查詢到的記錄數
@fldSort nvarchar(200), ----排序欄位列表或條件
@Sort bit = 0, ----排序方法,0為升序,1為降序(如果是多欄位排列Sort指代最後一個排序欄位的排列順序(最後一個排序欄位不加排序標記)--程序傳參如:' SortA Asc,SortB Desc,SortC ')
@strCondition nvarchar(2000) = null, ----查詢條件,不需where
@ID nvarchar(150), ----主表的主鍵
@Dist bit = 0 ----是否添加查詢欄位的 DISTINCT 默認0不添加/1添加
)
AS
SET NOCOUNT ON
Declare @sqlTmp nvarchar(1000) ----存放動態生成的SQL語句
Declare @strTmp nvarchar(max) ----存放取得查詢結果總數的查詢語句
Declare @strID nvarchar(1000) ----存放取得查詢開頭或結尾ID的查詢語句

Declare @strSortType nvarchar(10) ----數據排序規則A
Declare @strFSortType nvarchar(10) ----數據排序規則B

Declare @SqlSelect nvarchar(50) ----對含有DISTINCT的查詢進行SQL構造
Declare @SqlCounts nvarchar(50) ----對含有DISTINCT的總數查詢進行SQL構造

if @Dist = 0
begin
set @SqlSelect = 'select '
set @SqlCounts = 'Count(*)'
end
else
begin
set @SqlSelect = 'select distinct '
set @SqlCounts = 'Count(DISTINCT '+@ID+')'
end

if @Sort=0
begin
set @strFSortType=' ASC '
set @strSortType=' DESC '
end
else
begin
set @strFSortType=' DESC '
set @strSortType=' ASC '
end

--------生成查詢語句--------
--此處@strTmp為取得查詢結果數量的語句
if @strCondition is null or @strCondition='' --沒有設置顯示條件
begin
set @sqlTmp = @fldName + ' From ' + @tblName
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName
set @strID = ' From ' + @tblName
end
else
begin
set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition
set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition
set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition
end

----取得查詢結果總數量-----
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
declare @tmpCounts int
if @Counts = 0
set @tmpCounts = 1
else
set @tmpCounts = @Counts

--取得分頁總數
set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize

/**//**當前頁大於總頁數 取最後一頁**/
if @page>@pageCount
set @page=@pageCount

--/*-----數據分頁2分處理-------*/
declare @pageIndex int --總數/頁大小
declare @lastcount int --總數%頁大小

set @pageIndex = @tmpCounts/@pageSize
set @lastcount = @tmpCounts%@pageSize
if @lastcount > 0
set @pageIndex = @pageIndex + 1
else
set @lastcount = @pagesize

--//***顯示分頁
if @strCondition is null or @strCondition='' --沒有設置顯示條件
begin
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分數據處理
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strFSortType+')'
+' order by '+ @fldSort +' '+ @strFSortType
end
else
begin
set @page = @pageIndex-@page+1 --後半部分數據處理
if @page <= 1 --最後一頁數據顯示
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
else
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' order by '+ @fldSort +' '+ @strSortType+')'

+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
end
end

else --有查詢條件
begin
if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2 --前半部分數據處理
begin
set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName +' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
+' Where (1>0) ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType+')'
+' ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType
end
else
begin
set @page = @pageIndex-@page+1 --後半部分數據處理
if @page <= 1 --最後一頁數據顯示
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
else
set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
+' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
+' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+')'
+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
end
end

------返回查詢結果-----
exec sp_executesql @strTmp
print @strTmp
SET NOCOUNT OFF

這已經是很成熟的了。。。。很精簡。。你要分頁的話基本都是輸入這點參數。50萬條數據測試5秒內

⑽ SQL server 2008 存儲過程分頁實現,怎麼提升效率

創建存儲過程: create proc procPaging ( @tablename nvarchar(100), --表名 @column nvarchar(100)=null, --列名 @sort nvarchar(10), --排序asc,desc) @pageIndex int, --當前頁碼 @pageCount int --每頁顯示多少條數據 ) as begin declare @strSql nvarchar(max) set @strSql='select * from (select ROW_NUMBER() over(order by '+@column+''+@sort+' ) as rowid,* from '+@tablename+') newtable where rowid between '+ cast((@pageindex-1)*@pagecount+1 as nvarchar(100))+' and '+convert(varchar(20),@pageIndex*@pageCount) exec (@strSql) --執行字元串的SQL語句 end 執行存儲過程: exec procPaging 'BookShop_BookType','BookType_ID','asc',1,3 exec procPaging 'BookShop_BookType','BookType_ID','asc',2,3 刪除存儲過程: drop proc book_Paging

熱點內容
如何訪問pinterest 發布:2025-07-15 02:54:49 瀏覽:301
物種信息資料庫 發布:2025-07-15 02:54:00 瀏覽:475
蘋果手機忘記了訪問限制密碼 發布:2025-07-15 02:45:48 瀏覽:884
我的世界如何解決連接不到伺服器的方法 發布:2025-07-15 02:44:20 瀏覽:828
計算機視覺編程手冊 發布:2025-07-15 02:37:47 瀏覽:822
廣東華興銀行賬號未設置查詢密碼什麼意思 發布:2025-07-15 02:35:36 瀏覽:20
郵政登陸密碼是什麼意思 發布:2025-07-15 01:53:23 瀏覽:230
演算法與程序設計vb 發布:2025-07-15 01:50:39 瀏覽:720
什麼是測試腳本 發布:2025-07-15 01:44:58 瀏覽:515
商湯科技存儲負責人 發布:2025-07-15 01:24:21 瀏覽:252