1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| CREATE PROCEDURE [dbo].[sta_pageview] @tbname nvarchar(128), @FieldKey nvarchar(50), @PageCurrent int=1, @PageSize int=10, @FieldShow nvarchar(1000)='', @FieldOrder nvarchar(1000)='', @Where nvarchar(1000)='', @PageCount int OUTPUT, @RecordCount int OUTPUT AS SET NOCOUNT ON
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')'
IF @PageCount IS NULL BEGIN DECLARE @sql nvarchar(4000) SET @sql=N'SELECT @RecordCount=COUNT(*)' +N' FROM '+@tbname +N' '+@Where EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT SET @PageCount=(@RecordCount+@PageSize-1)/@PageSize END
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 @TopN=@TopN1-@PageSize EXEC(N'SET ROWCOUNT '+@TopN1 +N' SELECT '+@FieldKey + ' as tempfk' +N' INTO # FROM '+@tbname +N' '+@Where +N' '+@FieldOrder +N' SET ROWCOUNT '+@TopN +N' DELETE FROM #' +N' SELECT '+@FieldShow +N' FROM '+@tbname +N' WHERE EXISTS(SELECT * FROM # WHERE tempfk ='+@FieldKey +N') '+@FieldOrder) END
|