CREATE PROC sp_FKPager
@sField varchar(1024), --显示字段
@sTableName varchar(1024), --读取表名
@sFKTableName varchar(1024), --关系表名
@sWhere varchar(1024), --查询条件
@sOrderby varchar(1024), --排序规则,一定要DESC或ASC
@sID varchar(1024), --表主键,以此为计算行数
@PageSize int, --每页显示数
@PageNo int --页码
ASSET NOCOUNT ON
DECLARE @sSQL nvarchar(4000), @tmpIndex int, @P int
SET @sSQL = ''
SET @tmpIndex = -1IF @PageNo < 1
SET @PageNo = 1
IF @PageSize < 1
SET @PageSize = 10--总记录数
SET @sSQL = 'SELECT COUNT(' + @sID + ') AS RecordSet FROM ' + @sTableName
IF @sWhere <> ''
SET @sSQL = @sSQL + ' WHERE ' + @sWhere
--print @sSQL
EXEC(@sSQL)IF @PageNo = 1
BEGIN
SET ROWCOUNT @PageSize
SET @sSQL = 'SELECT ' + @sField + ' FROM ' + @sFKTableName
IF @sWhere <> ''
SET @sSQL = @sSQL + ' WHERE ' + @sWhere
IF @sOrderby <> ''
SET @sSQL = @sSQL + ' ORDER BY ' + @sOrderby
--print @sSQL
EXEC(@sSQL)
RETURN
END--不是第一页
SET @P = (@PageNO - 1) * @PageSize
SET ROWCOUNT @PSET @sSQL = 'SELECT @Index = ' + @sID + ' FROM ' + @sTableName
IF @sWhere <> ''
SET @sSQL = @sSQL + ' WHERE ' + @sWhere
IF @sOrderby <> ''
SET @sSQL = @sSQL + ' ORDER BY ' + @sOrderbyEXECUTE sp_executesql @sSQL, N'@Index int OUT', @Index = @tmpIndex OUTPUT 这句话什么意思呀????
--print @tmpIndexSET @sSQL = 'SELECT ' + @sField + ' FROM ' + @sFKTableName
IF @sWhere = ''
BEGIN
IF CHARINDEX('DESC', @sOrderby) <> 0
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' < ' + Convert(Nvarchar(50), @tmpIndex)
ELSE
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' > ' + Convert(Nvarchar(50), @tmpIndex)
END
ELSE
BEGIN
IF CHARINDEX('DESC', @sOrderby) <> 0
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' < ' + Convert(Nvarchar(50), @tmpIndex) + ' AND (' + @sWhere + ')'
ELSE
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' > ' + Convert(Nvarchar(50), @tmpIndex) + ' AND (' + @sWhere + ')'
ENDIF @sOrderby <> ''
SET @sSQL = @sSQL + ' ORDER BY ' + @sOrderby
--print @sSQL
SET ROWCOUNT @PageSize
EXEC(@sSQL)
SET NOCOUNT OFF
GO
@sField varchar(1024), --显示字段
@sTableName varchar(1024), --读取表名
@sFKTableName varchar(1024), --关系表名
@sWhere varchar(1024), --查询条件
@sOrderby varchar(1024), --排序规则,一定要DESC或ASC
@sID varchar(1024), --表主键,以此为计算行数
@PageSize int, --每页显示数
@PageNo int --页码
ASSET NOCOUNT ON
DECLARE @sSQL nvarchar(4000), @tmpIndex int, @P int
SET @sSQL = ''
SET @tmpIndex = -1IF @PageNo < 1
SET @PageNo = 1
IF @PageSize < 1
SET @PageSize = 10--总记录数
SET @sSQL = 'SELECT COUNT(' + @sID + ') AS RecordSet FROM ' + @sTableName
IF @sWhere <> ''
SET @sSQL = @sSQL + ' WHERE ' + @sWhere
--print @sSQL
EXEC(@sSQL)IF @PageNo = 1
BEGIN
SET ROWCOUNT @PageSize
SET @sSQL = 'SELECT ' + @sField + ' FROM ' + @sFKTableName
IF @sWhere <> ''
SET @sSQL = @sSQL + ' WHERE ' + @sWhere
IF @sOrderby <> ''
SET @sSQL = @sSQL + ' ORDER BY ' + @sOrderby
--print @sSQL
EXEC(@sSQL)
RETURN
END--不是第一页
SET @P = (@PageNO - 1) * @PageSize
SET ROWCOUNT @PSET @sSQL = 'SELECT @Index = ' + @sID + ' FROM ' + @sTableName
IF @sWhere <> ''
SET @sSQL = @sSQL + ' WHERE ' + @sWhere
IF @sOrderby <> ''
SET @sSQL = @sSQL + ' ORDER BY ' + @sOrderbyEXECUTE sp_executesql @sSQL, N'@Index int OUT', @Index = @tmpIndex OUTPUT 这句话什么意思呀????
--print @tmpIndexSET @sSQL = 'SELECT ' + @sField + ' FROM ' + @sFKTableName
IF @sWhere = ''
BEGIN
IF CHARINDEX('DESC', @sOrderby) <> 0
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' < ' + Convert(Nvarchar(50), @tmpIndex)
ELSE
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' > ' + Convert(Nvarchar(50), @tmpIndex)
END
ELSE
BEGIN
IF CHARINDEX('DESC', @sOrderby) <> 0
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' < ' + Convert(Nvarchar(50), @tmpIndex) + ' AND (' + @sWhere + ')'
ELSE
SET @sSQL = @sSQL + ' WHERE ' + @sID + ' > ' + Convert(Nvarchar(50), @tmpIndex) + ' AND (' + @sWhere + ')'
ENDIF @sOrderby <> ''
SET @sSQL = @sSQL + ' ORDER BY ' + @sOrderby
--print @sSQL
SET ROWCOUNT @PageSize
EXEC(@sSQL)
SET NOCOUNT OFF
GO
解决方案 »
- 求一汇总的sql语句 请高手们指点指点 在线等-------
- 一个SQL的外键问题
- 选取每组中id值最大的记录,怎么写?在线等
- 大家帮我看看为什么有这样的错?在线等!!!
- sql server 里面有没有象oracle里sequence一样的机制?
- sp_addumpdevice 备份数据库出错 !!!
- 请问在服务器里有许多数据库,如何查到该服务器的默认服务器(用何存贮过程,详细用法!)?
- SQL Server 怎么安装不上去,我已经把注册表中的关于SQL Server 的信息删了,怎么还不行呀,天!
- 征集sql语句!!!!!20分!!!
- develop6i開發中的疑問?
- 如何将ms sql server6.5版本备份出的dat文件导入到ms sql server2000中?
- 关于set rowcount的问题,是否在存储过程中调用了set rowcount N 以后数据库中的所以查询操作都会受到影响?
create table a(id int)
insert into a select 1
godeclare @tbname nvarchar(10)
set @tbname='a'
declare @sql nvarchar(4000)
declare @count int
declare @t int
set @sql=N'select @count=count(*) from ['+@tbname+']'
exec sp_executesql @sql,N'@count int output',@count=@t output
select @tdrop table a