这个存储过程用来数据的分页,里面构造的一个函数实现这个功能;
if object_id('fenye','p') is not null
/*判断是否存在fenye这个存储过程*/
drop proc fenye GO CREATE PROCEDURE [dbo].[fenye] @currentpage int=1,
/*记录当前的页数,初始值为1*/
@count int=10,
/*每一个页面所显示的数据量*/
@tablename varchar(20),
/*所查询的表的名字*/
@colunm varchar(20)
/*表中查询的字段*/
AS declare @sql nvarchar(1000)
/*定义查询字段变量*/
set @sql=N'select top '+ cast(@count as nvarchar(3))
/*将字符串变量转换成字符型*/
SET @sql=@sql+N' * from '+@tablename+' where '+@colunm+' not in (' set @sql=@sql+N' select top '+cast(((@currentpage-1)*@count) as nvarchar(3)) set @sql=@sql+@colunm+N' from '+@tablename+')' SELECT @sql
/*显示出插叙语句*/
exec (@sql) Go
exec fenye 1,3,'dbo.Article_Comment','ArticleID'
/*执行查询*/
GO
/*这里面是构造查询所有数据记录的条数的函数*/
DECLARE @TEMP NVARCHAR(500) DECLARE @TABLENAME NVARCHAR(50) DECLARE @COUNT INT SET @TABLENAME=N'dbo.Article_Comment' SET @TEMP=N' SELECT @A=COUNT(*) FROM '+@TABLENAME EXEC SP_EXECUTESQL @TEMP ,N'@A INT OUTPUT',@COUNT OUTPUT
/*调用的是系统中的一个函数 SP_EXECUTESQL(执行的SQL语句,输出变量的函数类型,输出变量的函数)*/
SELECT @COUNT