SQLSERVER Pager store procedure分页存储过程数据库教程

| 收藏本文 下载本文 作者:Nicki

以下是小编收集整理的SQLSERVER Pager store procedure分页存储过程数据库教程(共含5篇),仅供参考,欢迎大家阅读。同时,但愿您也能像本文投稿人“Nicki”一样,积极向本站投稿分享好文章。

SQLSERVER Pager store procedure分页存储过程数据库教程

篇1:管理存储过程数据库教程

12.3.1 查看存储过程

存储过程被创建以后,它的名字存储在系统表sysobjects 中;它的源代码存放在系统表syscomments 中,可以通过MS SQL Server 提供的系统存储过程来查看关于用户创建的存储过程信息。

1通过Enterprise Manager 管理工具同样可以查看存储过程的源代码

其操作如下:

(1) 启动Enterprise Manager, 登录到要使用的服务器。

(2) 选择要创建存储过程的数据库,在左窗格中单击Stored Procedure 文件夹,此时在右窗格中显示该数据库的所有存储过程。

(3) 在右窗格中,右击要查看源代码的存储过程,在弹出的菜单中选择Properties选项,此时便可看到存储过程的源代码。如图12-4 所示:

2 使用sp_helptext 存储过程查看存储过程的源代码

其语法格式如下:

sp_helptext 存储过程名称

例如要查看数据库pubs 是否是存储过程reptq1 的源代码,则执行sp_helptext reptq1。

注意:如果在创建存储过程时使用了WITH ENCRYPTION选项,那么无论是使用Enterprise Manager还是系统存储过程sp_helptext都无法查看到存储过程的源代码。

12.3.2 重新命名存储过程

修改存储过程的名字使用系统存储过程sp_rename。 其命令格式为:

sp_rename 原存储过程名, 新存储过程名

例12-4 :将存储过程reptq1 修改为newproc 其语句为:

sp_rename reptq1, newproc

另外,通过Enterprise Manager 也可修改存储过程的名字,其操作过程与WINDOWS 下修改文件名字的操作类似。即首先选中需修改名字的存储过程,然后右击鼠标,在弹出菜单中选取rename 选项,最后输入新存储过程的名字。

12.3.3 删除存储过程

删除存储过程使用drop 命令,drop 命令可将一个或多个存储过程或者存储过程组从

当前数据库中删除。其语法规则为:

DROP PROCEDURE {procedure}} [,…n]

例12-5: 如将存储过程reptq1 从数据库中删除,则执行:

drop procedure reptq1

12.3.4 执行存储过程

执行已创建的存储过程使用EXECUTE 命令,其语法如下:

[EXECUTE]

{[@return_statur=]

{procedure_name[;number] | @procedure_name_var}

[[@parameter=] {value | @variable [OUTPUT] | [DEFAULT] [,…n]

[WITH RECOMPILE]

各参数的含义如下:

@return_status

是可选的整型变量,用来存储存储过程向调用者返回的值,

@procedure_name_var

是一变量名用来代表存储过程的名字。

其它参数据和保留字的含义与CREATE PROCEDURE 中介绍的一样。

例12-6: 该存储过程被用来将两个字符串连接成一个字符串,并将结果返回。创建存储过程:

12.3.5 修改存储过程

修改以前用CREATE PROCEDURE 命令创建的存储过程,并且不改变权限的授予情况以及不影响任何其它的独立的存储过程或触发器常使用ALTER PROCEDURE 命令。其语法规则是:

ALTER PROC[EDURE] procedure_name [;number]

[ {@parameter data_type } [VARYING] [= default] [OUTPUT]] [,...n]

[WITH

{RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION}]

[FOR REPLICATION]

AS

sql_statement [...n]

其中各参数和保留字的具体含义请参看CREATE PROCEDURE 命令。

下面将举一个例子使读者对该命令有更为深刻的理解。

将该段代码输入到SQL Server Query Analyzer 窗口中运行后结果为:

注意:由于在ALERT PROCEDURE中使用了WITH ENCTYPTION保留字,所以在查看修改后的存储过程源代码时看到是一些代码。

篇2:SQLSERVER Pager store procedure分页存储过程数据库教程

复制代码代码如下:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[Pagination]

@Page int = 1, -- 当前页码

@PageSize int = 10, -- 每页记录条数(页面大小)

@Table nvarchar(500), -- 表名或视图名,甚至可以是嵌套SQL:(Select * From Tab Where ID>1000) Tab

@Field nvarchar(800) = '*', -- 返回记录集字段名,“,”隔开,默认是“*”

@OrderBy nvarchar(100) = 'ID ASC', -- 排序规则

@Filter nvarchar(500), -- 过滤条件

@MaxPage smallint output, -- 执行结果 -1 error, 0 false, maxpage true

@TotalRow int output, -- 记录总数 /* -07-12 22:11:00 update */

@Descript. varchar(100) output -- 结果描述

AS

BEGIN

-- =============================================

-- Author: Jimmy.Yu

-- Create date: 2007-5-11

-- Description: SQL 以上版本 通用分页存储过程

-- =============================================

Set ROWCOUNT @PageSize;

Set @Descript. = 'successful';

-------------------参数检测----------------

IF LEN(RTRIM(LTRIM(@Table))) !>0

Begin

Set @MaxPage = 0;

Set @Descript. = 'table name is empty';

Return;

End

IF LEN(RTRIM(LTRIM(@OrderBy))) !>0

Begin

Set @MaxPage = 0;

Set @Descript. = 'order is empty';

Return;

End

IF ISNULL(@PageSize,0) <= 0

Begin

Set @MaxPage = 0;

Set @Descript. = 'page size error';

Return;

End

IF ISNULL(@Page,0) <= 0

Begin

Set @MaxPage = 0;

Set @Descript. = 'page error';

Return;

End

-------------------检测结束----------------

Begin Try

-- 整合SQL

Declare @SQL nvarchar(4000), @Portion nvarchar(4000);

Set @Portion = ' ROW_NUMBER OVER (ORDER BY ' + @OrderBy + ') AS ROWNUM FROM ' + @Table;

Set @Portion = @Portion + (CASE WHEN LEN(@Filter) >= 1 THEN (' Where ' + @Filter + ') AS tab') ELSE (') AS tab') END);

Set @SQL = 'Select TOP(' + CAST(@PageSize AS nvarchar(8)) + ') ' + @Field + ' FROM (Select ' + @Field + ',' + @Portion;

Set @SQL = @SQL + ' Where tab.ROWNUM >' + CAST((@Page-1)*@PageSize AS nvarchar(8));

-- 执行SQL, 取当前页记录集

Execute(@SQL);

--------------------------------------------------------------------

-- 整合SQL

Set @SQL = 'Set @Rows = (Select MAX(ROWNUM) FROM (Select' + @Portion + ')';

-- 执行SQL, 取最大页码

Execute sp_executesql @SQL, N'@Rows int output', @TotalRow output;

Set @MaxPage = (CASE WHEN (@TotalRow % @PageSize)0 THEN (@TotalRow / @PageSize + 1) ELSE (@TotalRow / @PageSize) END);

End Try

Begin Catch

-- 捕捉错误

Set @MaxPage = -1;

Set @Descript. = 'error line: ' + CAST(ERROR_LINE() AS varchar(8)) + ', error number: ' + CAST(ERROR_NUMBER() AS varchar(8)) + ', error message: ' + ERROR_MESSAGE();

Return;

End Catch;

-- 执行成功

Return;

END

相对应的页面逻辑中写的对应调用该存储过程的方法(C#)

篇3:一个将数据分页的存储过程数据库教程

存储过程|分页|数据

CREATE PROCEDURE sp_page

@tb        varchar(50), --表名

@col       varchar(50), --按该列来进行分页

@coltype   int,        --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型

@orderby   bit,        --排序,0-顺序,1-倒序

@collist   varchar(800),--要查询出的字段列表,*表示全部字段

@pagesize  int,        --每页记录数

@page      int,        --指定页

@condition varchar(800),--查询条件

@pages     int OUTPUT  --总页数

AS

/*

功能描述:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序

查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数

作   者:pbsql

版   本:1.10

最后修改:-11-29

*/

DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)

IF @condition is null or rtrim(@condition)=''

BEGIN--没有查询条件

SET @where1=' WHERE '

SET @where2=' '

END

ELSE

BEGIN--有查询条件

SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件

SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件

END

SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+

') FROM '+@tb+@where2

EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数

IF @orderby=0

SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+

' FROM (SELECT">'+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+

' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+

@col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col

ELSE

SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+

' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+

' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+

@col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+

@col+' DESC'

IF @page=1--第一页

SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+

@where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END

EXEC(@sql)

GO

本存储过程高效,曾用500万条数据测试(已建索引),只返回分页只需3秒,影响效率的地方是计算总页数,若不需要可以注释掉

--测试示例

declare @pages int

select identity(int,1,1) id,getdate() dt,xx=cast('' as varchar(10)) into #t

from sysobjects

update #t set dt=dateadd(day,id-200,dt),

xx='xxxx'+right('000000'+cast(id as varchar(10)),6)

exec sp_page '#t','id',0,0,'*',10,2,'',@pages output--按id顺序取第二页

exec sp_page '#t','id',0,1,'*',10,2,'',@pages output--按id倒序取第二页

exec sp_page '#t','xx',1,0,'*',10,3,'',@pages output--按xx顺序取第三页

exec sp_page '#t','xx',1,1,'*',10,3,'',@pages output--按xx倒序取第三页

exec sp_page '#t','dt',2,0,'*',10,2,'',@pages output--按dt顺序取第二页

exec sp_page '#t','dt',2,1,'*',10,2,'',@pages output--按dt倒序取第二页

select 总页数=@pages

drop table #t

篇4:分页存储过程(用存储过程实现数据库的分页代码)数据库教程

复制代码代码如下:

--*******************************************************

--* 分页存储过程 *

--* 撒哈拉大森林 *

--* -6-28 *

--*******************************************************

if exists(select * from sysobjects where type='P' and name=N'P_Paging')

drop procedure P_Paging

go

create procedure P_Paging

@SqlStr nvarchar(4000), --查询字符串

@CurrentPage int, --第N页

@PageSize int --每页行数

as

set nocount on

declare @P1 int, --P1是游标的id

@rowcount int

exec sp_cursoropen @P1 output,@SqlStr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output

select ceiling(1.0*@rowcount/@PageSize) as 总页数--,@rowcount as 总行数,@CurrentPage as 当前页

set @CurrentPage=(@CurrentPage-1)*@PageSize+1

exec sp_cursorfetch @P1,16,@CurrentPage,@PageSize

exec sp_cursorclose @P1

set nocount off

go

----创建测试表

--if exists(select * from sysobjects where type='U' and name=N'Test_Students')

-- drop table Test_Students

--go

--create table Test_Students(

-- id int IDENTITY(1,1) not null,

-- name nvarchar(100) not null

--)

--

----创建测试数据

--declare @i int

--set @i = 100000

--while @i>0

-- begin

-- insert into Test_Students values('姓名')

-- set @i = @i - 1

-- end

--

----执行存储过程

--exec P_Paging 'select * from Test_Students order by id',100,100 --执行

--

----删除测试表

--if exists(select * from sysobjects where type='U' and name=N'Test_Students')

-- drop table Test_Students

--go

篇5:存储过程实现分页

USE [HDIS]

GO

/****** Object: StoredProcedure [dbo].[AspNetPager] Script. Date: 12/30/2014 09:00:35 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

Create procedure [dbo].[AspNetPager]

(@tablename nvarchar (1000), --表名

@filedname nvarchar (4000), --查询的字段

@startIndex int, --起始记录数

@endIndex int, --结束记录数

@where nvarchar (4000), --条件 (不包含where)

@orderfiled nvarchar (100), --排序字段 (CreateDate desc)

@PageSize int,

@prmkeyName nvarchar (100),

@pageIndex int,

@docount bit)

as

begin

declare @date varchar(50),@sql nvarchar (4000) ,@i int

select @date =CONVERT(nvarchar(50), serverproperty(‘productversion‘))

--if(CONVERT(int, SUBSTRING(@date,0,3))>8) ------sql2000以上

-- begin

-- if(@docount=1)

-- set @sql = ‘select count(*) from ‘ + @tablename +‘ where ‘ + @where

-- else

-- begin

-- set @sql =‘

-- with temptbl as (

-- SELECT ROW_NUMBER() OVER (ORDER BY ‘+ @orderfiled +‘ )AS Row, * from ‘+ @tablename +‘ where ‘+ @where +‘)

-- SELECT ‘+ @filedname +‘ FROM temptbl where Row between ‘+CONVERT(nvarchar(100),@startIndex) +‘ and ‘+CONVERT(nvarchar(100),@endIndex )

-- END

-- exec (@sql)

-- end

--else

begin -------sql2000

if(@docount=1)

set @sql = ‘select count(*) from ‘ + @tablename +‘ where ‘ + @where

else

begin

set @i= CONVERT(nvarchar(100),@PageSize)*(CONVERT(nvarchar(100),@pageIndex)-1)

set @sql = ‘SELECT TOP ‘+ CONVERT(nvarchar(100),@PageSize) +‘ *

FROM ‘ + @tablename +‘ WHERE (‘+@where +‘ and‘+@prmkeyName+‘ NOT IN

(SELECT TOP ‘+CONVERT(nvarchar(100),@i)+‘ ‘ +@prmkeyName +‘

FROM ‘ + @tablename +‘ WHERE ‘ + @where+‘ ORDER BY ‘+ @orderfiled +‘)) ORDER BY ‘+ @orderfiled

end

--print(@sql)

exec (@sql)

end

end

SQL分隔字符串的存储过程数据库教程

SQL SERVER数据库备份和恢复存储过程(加强版本)数据库教程

实现千万级数据的分页显示数据库教程

ChangeAllObjectOwner数据库教程

项目管理数据库教程

复制监视器数据库教程

组合查询数据库教程

如何终止数据库恢复过程

删除Oracle 9i数据库数据库教程

预装入对象数据库教程

SQLSERVER Pager store procedure分页存储过程数据库教程(精选5篇)

欢迎下载DOC格式的SQLSERVER Pager store procedure分页存储过程数据库教程,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档