⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sql.txt

📁 数据库分页过程
💻 TXT
字号:
--region Drop Existing Procedures

IF OBJECT_ID(N'[dbo].[usp_Paging]') IS NOT NULL
	DROP PROCEDURE [dbo].[usp_Paging]
--endregion

--region [dbo].[usp_Paging]

------------------------------------------------------------------------------------------------------------------------
-- Author: zhanghaifeng
-- Procedure Name: [dbo].[usp_Paging]
-- Date Generated: 2008年11月12日
------------------------------------------------------------------------------------------------------------------------

GO
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

CREATE  PROCEDURE usp_Paging


@Tables varchar(1000),
@PK varchar(100),
@Sort varchar(200) = NULL,
@PageIndex int = 0,
@PageSize int = 10,
@Fields varchar(1000) = '*',
@Filter varchar(1000) = NULL,
@ReturnRowcount bit=1
AS

/*Find the @PK type*/
DECLARE @PKTable varchar(100)
DECLARE @PKName varchar(100)
DECLARE @type varchar(100)
DECLARE @prec int

IF CHARINDEX('.', @PK) > 0
	BEGIN
		SET @PKTable = SUBSTRING(@PK, 0, CHARINDEX('.',@PK))
		SET @PKName = SUBSTRING(@PK, CHARINDEX('.',@PK) + 1, LEN(@PK))
	END
ELSE
	BEGIN
		SET @PKTable = @Tables
		SET @PKName = @PK
	END

DECLARE @strPageSize varchar(50)
DECLARE @strStartRow varchar(50)
DECLARE @strFilter varchar(1000)
DECLARE @strGroup varchar(1000)

/*Default Sorting*/
IF @Sort IS NULL OR @Sort = ''
	SET @Sort = @PK

/*Default Page Number*/
IF @PageIndex < 0
	SET @PageIndex = 0


/*Set paging variables.*/
SET @strPageSize = CAST(@PageSize AS varchar(50))
SET @strStartRow = CAST(((@PageIndex)*@PageSize + 1) AS varchar(50))

/*Set filter & group variables.*/
IF @Filter IS NOT NULL AND @Filter != ''
	SET @strFilter = ' WHERE ' + @Filter + ' '
ELSE
	SET @strFilter = ''

--读取总记录数	
if @ReturnRowcount=1
	Exec('SELECT count(*) FROM ' + @Tables + @strFilter  )


--为了使用临时表,要知道逐渐类型
SELECT @type=t.name, @prec=c.prec
FROM sysobjects o 
JOIN syscolumns c on o.id=c.id
JOIN systypes t on c.xusertype=t.xusertype
WHERE o.name = @PKTable AND c.name = @PKName

IF CHARINDEX('char', @type) > 0
   SET @type = @type + '(' + CAST(@prec AS varchar) + ')'



/*Execute dynamic query*/	
EXEC(
'DECLARE @PageSize int
SET @PageSize = ' + @strPageSize + '

DECLARE @PK ' + @type + '
DECLARE @tblPK TABLE (
	    IndexId int IDENTITY (0, 1) NOT NULL,
            PK  ' + @type + ' NOT NULL PRIMARY KEY
            )




DECLARE PagingCursor CURSOR DYNAMIC READ_ONLY FOR
SELECT '  + @PK + ' FROM ' + @Tables + @strFilter  + ' ORDER BY
 ' + @Sort + '

OPEN PagingCursor



FETCH RELATIVE ' + @strStartRow + ' FROM PagingCursor INTO @PK

SET NOCOUNT ON

WHILE @PageSize > 0 AND @@FETCH_STATUS = 0
BEGIN
            INSERT @tblPK (PK)  VALUES (@PK)
            FETCH NEXT FROM PagingCursor INTO @PK
            SET @PageSize = @PageSize - 1
END

CLOSE       PagingCursor
DEALLOCATE  PagingCursor

SELECT ' + @Fields + ' FROM ' + @Tables + ' JOIN @tblPK tblPK ON ' + @PK + ' = 
tblPK.PK  ORDER BY  tblPK.IndexId asc'
)

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO
--endregion

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -