三種SQL分頁查詢的存儲(chǔ)過程代碼
更新時(shí)間:2011年12月27日 00:09:38 作者:
三種SQL分頁查詢的存儲(chǔ)過程代碼,需要的朋友可以參考下。
復(fù)制代碼 代碼如下:
--根據(jù)MAX(MIN)ID
CREATE PROC [dbo].[proc_select_id]
@pageindex int=1,--當(dāng)前頁數(shù)
@pagesize int=10,--每頁大小
@tablename VARCHAR(50)='',--表名
@fields VARCHAR(1000)='',--查詢的字段集合
@keyid VARCHAR(50)='',--主鍵
@condition NVARCHAR(1000)='',--查詢條件
@orderstr VARCHAR(500),--排序條件
@totalRecord BIGINT OUTPUT--總記錄數(shù)
AS
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
DECLARE @sql NVARCHAR(4000)
--IF(@totalRecord IS NULL)
--BEGIN
SET @sql=N'SELECT @totalRecord=COUNT(*)'
+N' FROM '+@tablename
+N' WHERE '+@condition
EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
--END
IF(@pageindex=1)
BEGIN
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
EXEC(@sql)
END
ELSE
BEGIN
DECLARE @operatestr CHAR(3),@comparestr CHAR(1)
SET @operatestr='MAX'
SET @comparestr='>'
IF(@orderstr<>'')
BEGIN
IF(CHARINDEX('desc',LOWER(@orderstr))<>0)
BEGIN
SET @operatestr='MIN'
SET @comparestr='<'
END
END
SET @sql=N'SELECT top '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@keyid+@comparestr
+N'(SELECT '+@operatestr+N'('+@keyid+N') FROM '+@tablename+N' WHERE '+@keyid
+N' IN (SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '+@tablename+N' WHERE '
+@condition+N' '+@orderstr+N')) AND '+@condition+N' '+@orderstr
EXEC(@sql)
END
GO
--根據(jù)ROW_NUMBER() OVER
CREATE PROC [dbo].[proc_select_page_row]
@pageindex INT=1,--當(dāng)前頁數(shù)
@pagesize INT=10,--每頁大小
@tablename VARCHAR(50)='',--表名
@fields VARCHAR(1000)='*',--查詢的字段集合
@keyid VARCHAR(50)='',--主鍵
@condition NVARCHAR(1000)='',--查詢條件
@orderstr VARCHAR(500),--排序條件
@totalRecord BIGINT OUTPUT--總記錄數(shù)
AS
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
DECLARE @sql NVARCHAR(4000)
-- IF @totalRecord IS NULL
-- BEGIN
SET @sql=N'SELECT @totalRecord=COUNT(*)'
+N' FROM '+@tablename
+N' WHERE '+@condition
EXEC sp_executesql @sql,N'@totalRecord bigint OUTPUT',@totalRecord OUTPUT
--END
IF(@pageindex=1)
BEGIN
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
EXEC(@sql)
END
ELSE
BEGIN
DECLARE @StartRecord INT
SET @StartRecord = (@pageindex-1)*@pagesize + 1
SET @sql=N'SELECT * FROM (SELECT ROW_NUMBER() OVER ('+ @orderstr +N') AS rowId,'+@fields+N' FROM '+ @tablename+N') AS T WHERE rowId>='+STR(@StartRecord)+N' and rowId<='+STR(@StartRecord + @pagesize - 1)
EXEC(@sql)
END
GO
--根據(jù)TOP ID
CREATE PROC [dbo].[proc_select_page_top]
@pageindex INT=1,--當(dāng)前頁數(shù)
@pagesize INT=10,--每頁大小
@tablename VARCHAR(50)='',--表名
@fields VARCHAR(1000)='',--查詢的字段集合
@keyid VARCHAR(50)='',--主鍵
@condition NVARCHAR(1000)='',--查詢條件
@orderstr VARCHAR(500),--排序條件
@totalRecord BIGINT OUTPUT--總記錄數(shù)
AS
IF ISNULL(@orderstr,N'')=N'' SET @orderstr=N' ORDER BY '+@keyid+N' DESC '
IF ISNULL(@fields,N'')=N'' SET @fields=N'*'
IF ISNULL(@condition,N'')=N'' SET @condition=N'1=1'
DECLARE @sql NVARCHAR(4000)
--IF(@totalRecord IS NULL)
--BEGIN
SET @sql=N'SELECT @totalRecord=COUNT(*)'
+N' FROM '+@tablename
+N' WHERE '+@condition
EXEC sp_executesql @sql,N'@totalRecord INT OUTPUT',@totalRecord OUTPUT
--END
IF(@pageindex=1)
BEGIN
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@condition+N' '+@orderstr
EXEC(@sql)
END
ELSE
BEGIN
SET @sql=N'SELECT TOP '+STR(@pagesize)+N' '+@fields+N' FROM '+@tablename+N' WHERE '+@keyid
+N' NOT IN(SELECT TOP '+STR((@pageindex-1)*@pagesize)+N' '+@keyid+N' FROM '
+@tablename+N' WHERE '+@condition+N' '+@orderstr+N') AND '+@condition+N' '+@orderstr
EXEC(@sql)
END
GO
您可能感興趣的文章:
- 五種SQL Server分頁存儲(chǔ)過程的方法及性能比較
- SQL Server 分頁查詢通用存儲(chǔ)過程(只做分頁查詢用)
- sqlserver2005利用臨時(shí)表和@@RowCount提高分頁查詢存儲(chǔ)過程性能示例分享
- 深入sql server 2005 萬能分頁存儲(chǔ)過程的詳解
- 基于Sql Server通用分頁存儲(chǔ)過程的解決方法
- mssql 高效的分頁存儲(chǔ)過程分享
- SQL Server 2005通用分頁存儲(chǔ)過程及多表聯(lián)接應(yīng)用
- MSSQL MySQL 數(shù)據(jù)庫分頁(存儲(chǔ)過程)
- SQL通用存儲(chǔ)過程分頁,支持多表聯(lián)合
- SQL分頁查詢存儲(chǔ)過程代碼分享
相關(guān)文章
SQL 多條件查詢幾種實(shí)現(xiàn)方法詳細(xì)介紹
這篇文章主要介紹了SQL 多條件查詢兩種實(shí)現(xiàn)方法詳細(xì)介紹的相關(guān)資料,一種是排列結(jié)合,另一種是動(dòng)態(tài)拼接SQL,需要的朋友可以參考下2016-12-12SQLServer存儲(chǔ)過程實(shí)現(xiàn)單條件分頁
本文主要介紹了SQLServer存儲(chǔ)過程實(shí)現(xiàn)單條件分頁的方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03完美解決MSSQL"以前的某個(gè)程序安裝已在安裝計(jì)算機(jī)上創(chuàng)建掛起的文件操作"
以前裝過sql server,后來刪掉?,F(xiàn)在重裝,卻出現(xiàn)“以前的某個(gè)程序安裝已在安裝計(jì)算機(jī)上創(chuàng)建掛起的文件操作。運(yùn)行安裝程序之前必須重新啟動(dòng)計(jì)算機(jī)”錯(cuò)誤。無法進(jìn)行下去。 現(xiàn)在又遇到了,終于完全搞定.2008-11-11Sqlserver 高并發(fā)和大數(shù)據(jù)存儲(chǔ)方案
本文主要介紹了Sqlserver 高并發(fā)和大數(shù)據(jù)存儲(chǔ)方案。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01存儲(chǔ)過程實(shí)現(xiàn)(可帶查詢條件/萬能分頁/通用)
可帶查詢條件的SQL語句的分頁存儲(chǔ)過程,在項(xiàng)目開發(fā)中很實(shí)用,感興趣的朋友可以了解下,希望本文可以鞏固你的存儲(chǔ)過程的相關(guān)知識(shí)2013-01-01SqlServer應(yīng)用之sys.dm_os_waiting_tasks 引發(fā)的疑問(中)
這篇文章主要介紹了SqlServer應(yīng)用之sys.dm_os_waiting_tasks 引發(fā)的疑問(中) 的相關(guān)資料,需要的朋友可以參考下2015-12-12