程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 針對SQL 2000 的分頁存儲進程代碼分享

針對SQL 2000 的分頁存儲進程代碼分享

編輯:MSSQL

針對SQL 2000 的分頁存儲進程代碼分享。本站提示廣大學習愛好者:(針對SQL 2000 的分頁存儲進程代碼分享)文章只能為提供參考,不一定能成為您想要的結果。以下是針對SQL 2000 的分頁存儲進程代碼分享正文



----------------------------------------------------
--針對SQL 2000 的分頁存儲進程
--Time:2008-9-25
----------------------------------------------------
ALTER PROCEDURE [dbo].[uoSp_RecordPager]
--要分頁顯示的表名,可多表連查,但不克不及應用別號。
--例:uo_Article LEFT JOIN uo_ArticleClass ON uo_Article.AClassID=uo_ArticleClass.ID
@Table_info varchar(100),

--用於定位記載的主鍵(唯一鍵)字段,可所以逗號分隔的多個字段
@field_id nvarchar(1000),

--要顯示的頁碼
@CurrentPage int=1,

--每頁的年夜小(記載數)
@PageSize int=10,

--以逗號分隔的要顯示的字段列表,假如不指定,則為*。但多表聯查時,如有同名字段,則必需顯示指定要查的字段。
--例:uo_Article.*,uo_ArticleClass.ClassName
@Field_info nvarchar(1000),

--以逗號分隔的排序字段列表,可以指定在字段前面指定DESC/ASC 用於指定排序次序
@Field_Order nvarchar(1000)= ' ',

--查詢前提
@otherwhere nvarchar(1000)= ' ',
@RecordCount int OUTPUT, --總行數
@PageCount int OUTPUT, --總頁數
@SQLSTR nvarchar(2000) output
AS
SET NOCOUNT ON

--分頁字段檢討
IF ISNULL(@field_id,N' ')= ' '
BEGIN
RAISERROR(N'分頁處置須要主鍵(或許唯一鍵) ',1,16)
RETURN
END

--其他參數檢討及標准
IF ISNULL(@PageSize,0) <1 SET @PageSize=10
IF ISNULL(@Field_info,N' ')=N' ' SET @Field_info=N'* '
IF ISNULL(@Field_Order,N' ')=N' '
SET @Field_Order=N' '
ELSE
SET @Field_Order=N'ORDER BY '+LTRIM(@Field_Order)

IF ISNULL(@otherwhere,N' ')=N' '
SET @otherwhere=N' '
ELSE
SET @otherwhere=N' WHERE ('+@otherwhere+N') '

--盤算@RecordCount
declare @sqlt nvarchar(1000)
set @sqlt = 'SELECT @RecordCount = COUNT(' + @Field_id + ') FROM ' + @Table_Info + @otherwhere
exec sp_executesql @sqlt,N'@RecordCount int output',@RecordCount output

--假如@PageCount為NULL值,則盤算總頁數(如許設計可以只在第一次盤算總頁數,今後挪用時,把總頁數傳回給存儲進程,防止再次盤算總頁數,關於不想盤算總頁數的處置而言,可以給@PageCount賦值)
IF @PageCount IS NULL
BEGIN
DECLARE @sql nvarchar(4000)
SET @sql=N'SELECT @PageCount=COUNT(*) '
+N' FROM '+@Table_info
+N' '+@otherwhere
EXEC sp_executesql @sql,N'@PageCount int OUTPUT ',@PageCount OUTPUT
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END

IF ISNULL(@CurrentPage,0) <1 SET @CurrentPage=1
IF @CurrentPage > @PageCount and @PageCount>0 SET @CurrentPage=@PageCount

--第一頁直接顯示
IF @CurrentPage = 1
BEGIN
SET @SQLSTR = N'SELECT TOP ' + str(@PageSize) +N' '+@Field_info +N' FROM '+@Table_info +N' '+@otherwhere +N' '+@Field_Order
--PRINT @SQLSTR
EXEC(@SQLSTR)
END
ELSE
BEGIN
----------------------------------------------------
--獲得第一個表的表名
DECLARE @FirstTableName varchar(20)
SET @FirstTableName = @Table_info
IF CHARINDEX(N',',@FirstTableName)>0 OR CHARINDEX(N'.',@FirstTableName)> 0 OR CHARINDEX(N' ',@FirstTableName)> 0
BEGIN
WHILE CHARINDEX(N',',@FirstTableName)> 0
SELECT @FirstTableName=LEFT(@FirstTableName,CHARINDEX(N',',@FirstTableName)-1)
WHILE CHARINDEX(N'.',@FirstTableName)> 0
SELECT @FirstTableName=LEFT(@FirstTableName,CHARINDEX(N'.',@FirstTableName)-1)
WHILE CHARINDEX(N' ',@FirstTableName)> 0
SELECT @FirstTableName=LEFT(@FirstTableName,CHARINDEX(N' ',@FirstTableName)-1)
END

--結構SQL語句
SET @SQLSTR = N'SELECT * FROM ('
+ N' SELECT TOP '+STR(@PageSize*@CurrentPage) +N' '+ @Field_info + N' FROM '+@Table_info +N' '+@otherwhere +N' '+@Field_Order
+ N') '+@FirstTableName+N' WHERE '+@field_id+N' NOT IN ('
+ N' SELECT TOP '+STR(@PageSize*(@CurrentPage-1))+N' '+ @field_id + N' FROM '+@Table_info +N' '+@otherwhere +N' '+@Field_Order
+ N') '
+ N' '+@Field_Order
EXEC(@SQLSTR)
----------------------------------------------------
END
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved