论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Asp教程
Tag:入门,文摘,实例,技巧,iis,表单,对象,上传,数据库,记录集,session,cookies,存储过程,注入,分页,安全,优化,xmlhttp,fso,jmail,application,防盗链,stream,组件,md5,乱码,缓存,加密,验证码,算法,ubb,正则表达式,水印,,日志,压缩,url重写,控件,函数,破解,触发器,socket,ADO,初学,聊天室,留言本,视频教程

存储过程及ASP调用存储过程实现分页(七)

文章类别:Asp | 发表日期:2010-2-1 13:42:33

存储过程及ASP调用存储过程实现分页(七)

以上的SQL优化只是给大家做个简单的介绍。希望你能看懂些,及在以后的应用中能想到的话就用上吧。这也是本文的目的。

为了方便大家参考我把所有的T-SQL语句写如下:

这里是所有的T-SQL语句,可以做为学习参考,里面我都注释,再不懂就在查询分析器里F1呵呵~:):

/*=======开始=========*/

CREATE database johnny    --创建数据库
go
USE johnny        --使用数据库
go
CREATE TABLE testTable(        --创建表
    tID int identity(1,1),    --创建字段,下同
    tUserName varchar(50),
    tTel varchar(30)
)
go
CREATE TABLE testUser
(
    uID int primary key identity(1,1),    --创建主键
    uName varchar(20) not null,        --用户名,非空
    uEmail varchar(50) not null,        --用户名电子邮件,非空
    uQQ int default 0            --用户QQ,默认0
)
go
/*先给用户表插入几条记录*/
insert into testUser(uName,uEmail,uQQ) values('johnny','chenzxmail@163.com',40623660)
insert into testUser(uName,uEmail,uQQ) values('张三','12345@163.com',123456)
insert into testUser(uName,uEmail,uQQ) values('李四','43435@163.com',4354534)
go
/*查看刚才插入的数据*/
select * from testuser
go
/*插入数据到测试的表*/
set nocount on    --当 SET NOCOUNT 为 ON 时,存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
declare @i int    --DECLARE 语句声明变量@i,并用 SET 或 SELECT 语句给其指派值。
set @i=1    --用 SET 或 SELECT 语句给其指派值
while @i<=200000    --只要指定的条件为真,就重复执行语句。即插入200000的数据,呵呵发了1分14秒的时间。
begin
insert into testTable(tUserName,tTel) values(CAST(round(rand()*100000,0) AS varchar),CAST(round(rand()*100000,0) AS varchar)+CAST(CEILING(round(rand()*100000,0)/3) AS VARCHAR))
SELECT @i=@i+1
end
go
/*查看刚才插入的前50条记录的信息*/
SELECT TOP 50 * FROM testTable
go
/*第一个简单的存储过程*/
CREATE PROC testPROC1
AS
SELECT * FROM testUser
go
/*==============
第2个存储过程:即有返回值,输入参数和输出参数。
●RETURN 语句无条件终止查询、存储过程或批处理。存储过程或批处理中 RETURN 语句后面的语句都不执行。
●return的说明:除非特别指明,所有系统存储过程返回 0 值表示成功,返回非零值则表示失败。
●本存储过程的return都是特别的说明,所以其返回值都是有相应的意义。
●下面的返回值0、1、2假如去掉的话,即如果 RETURN 未指定值,则存储过程返回 0。在程序调用且正常运行的情况下获取“返回值”的值都是返回 0 。
==============*/
CREATE PROC testPROC2
    @userName varchar(20),        --声明变量@userName
    @userEmail varchar(50) OUTPUT    --声明变量@userEmail,且是输出参数。
AS
set nocount on
begin
    IF @userName is null OR @userName=''    --当输入参数为空或is null时
    begin
        set @userEmail='请输入要查询的用户名!'    --符合条件给输出参数赋值,以便提示
        return 0    --输入参数为空时,“返回值”我们这里设置为 0(当然可以设置其他的数字)。
    end
    ELSE
        IF exists(SELECT uEmail FROM testUser WHERE uName=@userName)    --如果输入参数存在时
        begin
            SELECT @userEmail=uEmail FROM testUser WHERE uName=@userName    --输出参数赋值
            return 1    --验证输入的参数(用户名),存在时“返回值”我们这里设置为 1。
        end
        ELSE
        begin
            set @userEmail='不存在此用户名!'        ----如果输入参数 不 存在时,提示
            return 2    --输入的参数(用户名)不 存在时“返回值”我们这里设置为 2。
        end   
end
go
/*=======第3个存储过程====
有返回输出参数和记录集的存储过程

========================*/
CREATE PROC testPROC3
    @tPageCount int OUTPUT,    --输出参数,总页数
    @tPageSize int,        --每页显示多少条记录
    @tPageNo int        --当前页码
AS
SET NOCOUNT ON
BEGIN
    /*取得总记录条数*/
    DECLARE @tRecordCount int    --总记录条数
    SELECT @tRecordCount=COUNT(tID) FROM testTable
    --PRINT @tRecordCount
    /*确定总的页数*/
    IF (@tRecordCount % @tPageSize) = 0
        SET @tPageCount=CEILING(@tRecordCount/@tPageSize)    --CEILING函数:返回大于或等于所给数字表达式的最小整数。
    ELSE
        SET @tPageCount=CEILING(@tRecordCount/@tPageSize)+1
    /*如果输入的页码大于总的页数*/
    IF @tPageNo > @tPageCount
        SET @tPageNo = @tPageCount
    /*确定当前页记录的起止标记*/
    DECLARE @tStart int , @tEnd int    --设置起止标志
    SET @tStart=(@tPageNo-1) * @tPageSize
    SET @tEnd =@tStart+@tPageSize+1
    /*由其止标记得到当前页的记录*/
    SELECT * FROM testTable WHERE (tID>@tStart) AND (tID<@tEnd)
    --SELECT * FROM testTable WHERE (tID<@tEnd) AND (tID>@tStart)
    --SELECT * FROM testTable WHERE tID between @tStart+1 AND @tEnd
    /*我们把总记录做为返回值,这样存储过程就变了有返回值,输出参数和记录集了*/
    RETURN @tRecordCount    --做为返回值
   
END
GO
/*=======第4个存储过程=====
这个存储过程比较简单主要是说明怎么读取多个记录集的问题。
注意:记录集的要按顺序来读取。不能跳着读。
======================*/
USE johnny
go
CREATE PROC testPROC4
AS
SET NOCOUNT ON
BEGIN
    SELECT uName FROM testUser
    SELECT uEmail FROM testUser
    SELECT uQQ FROM testUser
END
go

--sp_helptext   testPROC1   --用于查看存储过程

视频教程列表
文章教程搜索
 
Asp推荐教程
Asp热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058