《4.程序设计.ppt》由会员分享,可在线阅读,更多相关《4.程序设计.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1SQL Server 中的程序设计中的程序设计 10.1 程序中的批、脚本、注释程序中的批、脚本、注释 10.2 SQL Server变量变量 10.3 程序中的流程控制程序中的流程控制10.4 SQL SEVER函数函数 10.5 程序中的事务程序中的事务10.6游标的使用游标的使用10.7案例应用举例案例应用举例 210.1 程序中的批、脚本、注释程序中的批、脚本、注释1.批处理批处理 批处理就是一个或多个Transact-SQL语句的集合,从应用程序次性发送到SQL Server并由SQL Server编译成个可执行单元,此单元称为执行计划。建立批处理时,使用GO语句作为批处理的结束标
2、记。310.1 程序中的批、脚本、注释程序中的批、脚本、注释2.脚本脚本 脚本是存储在文件中的一系列SQL语句,即一系列按顺序提交的批处理。SQL脚本中可以包含一个或多个批处理。使用脚本可以将创建和维护数据库时的操作步骤保存为一个磁盘文件。将Transact-SQL语句保存为脚本文件,不仅可以建立起可再用的模块化代码,还可以在不同计算机之间传送Transact-SQL语句,使两台计算机执行同样的操作。脚本可以在查询分析器中执行,也可以在isql或osql实用程序中执行。410.1 程序中的批、脚本、注释程序中的批、脚本、注释3.注释注释 注释是程序代码中不执行的文本字符串(也称为注解)。在SQ
3、L Server中,可以使用两种类型的注释字符:一种用于单行注释的注释符“-”,另一种是块注释,注释符号为“/*/”。510.2 SQL Server变量变量 变量是SQL Server用来在语句之间传递数据的方式之一。SQL 中有两种形式的变量,一种是系统提供的全局变量,另外一种是用户自己定义的局部变量。61.全局变量全局变量 全局变量是SQL Server系统提供并赋值的变量。用户不能建立全局变量,也不能修改全局变量。在SQL Server 2000中,全局变量是组特殊的函数,它们的名称是以开始,而且不需要任何参数,在调用时无需在函数名后面加上对圆括号,这些函数也称为无参函数。72.局部变
4、量局部变量 局部变量是指在批处理或脚本中用来保存数据值的对象。局部变量常用于作为计数器计算循环执行的次数或控制循环执行的次数,也可以用于保存由存储过程代码返回的数据值。此外,还可以使用Table数据类型的局部变量来代替临时表。82.局部变量局部变量1)声明局部变量)声明局部变量语法格式为:语法格式为:DECLARE 局部变量 数据类型,n2)局部变量赋值)局部变量赋值语句,语法格式如下:语句,语法格式如下:SET 局部变量=表达式,n SELECT 局部变量=表达式,n 3)局部变量的作用域)局部变量的作用域 局部变量的作用域从声明它们的地方开始到声明 它们的批处理或存储过程的结尾。910.3
5、 程序中的流程控制程序中的流程控制 流程控制语句是用来控制程序执行和流程分支的命令,流程控制语句是用来控制程序执行和流程分支的命令,这些命令包括条件控制语句,无条件转移语句和循环语句。这些命令包括条件控制语句,无条件转移语句和循环语句。使用这些命令,可以使程序具有结构性和逻辑性,并可完使用这些命令,可以使程序具有结构性和逻辑性,并可完成较复杂的操作。成较复杂的操作。1010.3 程序中的流程控制程序中的流程控制10.3.1 BEGINEND语句块语句块10.3.2 IFElSE语句语句10.3.3 CASE表达式表达式10.3.4 WAITFOR语句语句10.3.5 WHILE语句语句10.3
6、.6 PRINT语句语句10.3.7RETURN语句语句1110.3.1 BEGINEND语句块语句块 在条件和循环等流程控制语句中,要执行两个或两个以上的Transact-SQL语句时,就需要使用BEGINEND语句,这些语句可以作为一个单元来执行。其语法形式为:BEGIN 语句I 语句2 END1210.3.1 BEGINNEND语句块语句块BEGINEND语句通常用于下列情况:语句通常用于下列情况:l WHILE循环需要包含语句块。循环需要包含语句块。l CASE语句的元素需要包含语句块。语句的元素需要包含语句块。l IF或或ELSE子句需要包含语句块。子句需要包含语句块。1310.3.
7、2 IFElSE语句语句 在程序中,经常需要根据特定条件指示SQL Server执行不同的操作和运算,进行流程控制。SQL Server利用IFELSE命令使程序有不同的条件分支,从而完成各种不同条件环境下的操作。其语法形式为:IF 布尔表达式 语句1 ELSE 语句2 1410.3.2 IFElSE语句语句案例:案例:使用使用IFELSE语句实现以下功能:如果存在职称为副教授或教授的教师,语句实现以下功能:如果存在职称为副教授或教授的教师,那么输出这些教师的姓名、学历、职称,否则输出那么输出这些教师的姓名、学历、职称,否则输出“没有满足条件的教师没有满足条件的教师”信息。代码如下:信息。代码
8、如下:USEstudentGOIFEXISTS(SELECT*FROM教师教师WHERE职称职称=副教授副教授OR职称职称=教授教授)BEGINPRINT以下教师是具有高级职称的以下教师是具有高级职称的SELECT姓名姓名,学历学历,职称职称FROM教师教师WHERE职称职称=副教授副教授OR职称职称=教授教授ENDELSEBEGINPRINT没有满足条件的教师没有满足条件的教师ENDGO 1510.3.3 CASE表达式表达式 CASE表达式是一个特殊的Transact-SQL表达式,它能够实现多重选择的情况。CASE表达式不同于个普通的Transact-SQL语句,它不能单独执行,而只能作
9、为个可以单独执行的语句的一部分来使用。CASE表达式分为简单CASE表达式和搜索CASE表达式两种类型。1610.3.3 CASE表达式表达式1简单简单CASE表达式表达式 简单CASE表达式将一个测试表达式与一组简单表达式进行比较,如果某个简单表达式与测试表达式的值相等,则返回相应结果表达式的值。简单CASE表达式的语法格式为:CASE测试表达式 WHEN测试值1 THEN结果表达式1 WHEN测试值2THEN结果表达式2 ELSE 结果表达式n END 1710.3.3 CASE表达式表达式 案例:使用简单CASE表达式实现以下功能:分别输出课程号和课程名称,而且在课程名称后添加备注。代码
10、如下:USE studentGOSELECT 课程号,课程名称,备注=CASE 课程名称 WHEN SQL Server 2005 THEN 数据库应用技术 WHEN ASP.NET程序设计 THEN WEB程序设计 WHEN 计算机基础 THEN 计算机导论 WHEN 网络营销 THEN 电子商务ENDFROM 课程GO182搜索搜索CASE表达式表达式 与简单与简单CASE表达式相比较,在搜索表达式相比较,在搜索CASE表达式中,表达式中,CASE关键关键字后面不跟任何表达式,各个字后面不跟任何表达式,各个WHEN子句后都是布尔表达式。搜索子句后都是布尔表达式。搜索CASE表达式的语法格式
11、为:表达式的语法格式为:CASE WHEN布尔表达式1 THEN结果表达式1 WHEN布尔表达式2 THEN结果表达式2 n ELSE 结果表达式n END192搜索搜索CASE表达式表达式案例:使用搜索CASE表达式实现以下功能:分别输出班级代码、班级名称,并根据班级代码判别年级。代码如下:USE studentGOSELECT 班级代码,班级名称,年级=CASE WHEN LEFT(班级名称,2)=04 THEN 三年级 WHEN LEFT(班级名称,2)=05 THEN 二年级 WHEN LEFT(班级名称,2)=06 THEN 一年级ENDFROM 班级GO2010.3.4 WAITF
12、OR语句语句 WAITFOR语句可以暂停执行程序段时间之后再继续执行,也可以暂停执行程序到所指定的时间后再继续执行。WAITFOR语句的语法格式为:WAITFOR DELAY 时间|TIME 时间 2110.3.4 WAITFOR语句语句 案案例:设置在输出系部代码为“01”的班级信息后5秒钟输出系部代码为“02”的班级信息。代码如下:USE studentGOSELECT*FROM 班级 WHERE 系部代码=01GOWAITFOR DELAY 00:00:05SELECT*FROM 班级 WHERE 系部代码=02 GO 2210.3.5 WHILE语句语句 在程序中当需要多次重复处理某项
13、工作时,就需使用WHILE循环语句。WHILE语句的语法格式为:WHILE布尔表达式 BEGIN 语句序列1 BREAK 语句序列2 CONTINUE 语句序列3 END2310.3.5 WHILE语句语句 案例:使用案例:使用WHILE语句实现以下功能:求语句实现以下功能:求2300之间的所有素数。之间的所有素数。DECLARE I INT,J INTSET I=2WHILE I=300 BEGIN SET J=2 WHILE J=I-1 2410.3.5 WHILE语句语句 BEGIN IF I%J=0 BREAK ELSE SET J=J+1 END IF I=J PRINT CONVE
14、RT(VARCHAR,I)+是素数!SET I=I+1 END2510.3.6 PRINT语句语句SQL Server向向客客户户程程序序返返回回信信息息的的方方法法除除了了使使用用SELECT语语句句外外,还还可可以使用以使用PRINT语句,它的语法格式为:语句,它的语法格式为:PRINT 字符串|局部变量|全局变量 例例11.6 PRINT语句举例。语句举例。USE STUDENT GO DECLARE STR CHAR(20)SET STR=”欢迎使用PRINT语句”PRINT STR GO 2610.3.7 RETURN语句 RETURN的作用是无条件终止查询、存储过程或批处理等。可以
15、在任意位置使用RETURN语句,以便从语句块中退出。使用RETURN语句时要注意,该语句后面存在的语句都不会被系统执行。当RETURN语句用于存储过程时,它不能返回空值。如果某个过程试图返回空值,则将生成警告消息并返回0值。2710.4 SQL Server 函数函数 为了使用户对数据库进行查询和修改时更加方便,为了使用户对数据库进行查询和修改时更加方便,SQL server在在T-SQL语言中提供了许多内部函数以供调用。用户也可以根据自语言中提供了许多内部函数以供调用。用户也可以根据自己的需要创建函数。系统提供的函数称为内置函数;用户创建的函己的需要创建函数。系统提供的函数称为内置函数;用户
16、创建的函数称为用户自定义函数数称为用户自定义函数。2810.4 SQL Server 函数函数10.4.1 常用系统函数常用系统函数10.4.2 创建自定义函数创建自定义函数10.4.3 修改和删除自定义函数修改和删除自定义函数2910.4.1 常用系统函数常用系统函数 系统函数为三类:标量函数、聚合函数和行集函数。系统函数为三类:标量函数、聚合函数和行集函数。v标量函数:对单一值操作,返回单一值。标量函数:对单一值操作,返回单一值。v 聚合函数:对一组值进行计算后,向调用者返回单一的值。聚合函数:对一组值进行计算后,向调用者返回单一的值。v 行集函数:返回对象,该对象可在行集函数:返回对象,
17、该对象可在 SQL 语句中用作表引用。语句中用作表引用。对于每一个系统函数需要掌握两点:对于每一个系统函数需要掌握两点:v 函数功能函数功能v 调用形式调用形式3010.4.2用户自定义函数 在SQL Server中,用户不仅可以使用标准的内置函数,也可以使用自己定义的函数来实现一些特殊的功能。用户自定义函数可以在企业管理器中创建,也可以使用CREATE FUNCTION 语句创建。在创建时需要注意:函数名在数据库中必须唯一,其可以有参数,也可以没有参数,其参数只能是输入参数,最多可以有1024参数。标量函数:返回单个数据值。表值函数:返回值是一个记录集合表。在此函数中,return语句包含一
18、条单独的select语句。多语句表值函数:返回值是由选择的结果构成的记录集。3110.5 程序中的事务程序中的事务1.概述概述 1)事务)事务 事务是最小的工作单元。这个工作单元要么成功完成所有操作,要么就是失败,并将所做的一切复原。2)事务特性事务特性 原子性(Atomic)一致性(ConDemoltent)独立性(Isolated)持久性(Durable)3210.5 程序中的事务程序中的事务3)事务类型)事务类型 显式事务:显示事务是手工配置的事务。用保留字标识显式事务的开始和结束。开始显式事务,首先输入关键词BEGIN TRAN。结束显示事务,使用COMMIT TRAN。取消事务,使用
19、ROLL BACK TRAN命令。隐式事务:有时候看起来没有使用事务,但它们可能隐藏在幕后,这种事务叫做隐式事务。要使用这种模式,必须使用Set Implicit_Transactions On语句来设置连接。可以作为隐式事务的开始的与具有:ALTER TABLE、CREATE、DELETE、DROP、FETCH、GRANT、INSERT、OPEN、REVOKE、SELECT、TRUNCATE TABLE、UPDATE。结束隐式事务,必须使用COMMIT TRANSACTION或ROLLBACK TRANSACTION语句。3310.5 程序中的事务程序中的事务2.检查点处理检查点处理 1)检
20、查点 是SQL Server将数据页面从内存拷贝到磁盘时的内部处理点。2)检查点分类:自动检查点和手工检查点。自动检查点是基于SQL Server计算的。可在RECOVERY INTERVAL配置选项中规定检查点处理的频率。手工检查点可在任何时候输入Transact-SQL命令CHECKPOINT来强制执行。只有SA 或数据库的DBA才能执行该命令。3410.6游标游标游标是处理数据的一种方法,可以看作是一个表中的记录的指针,作用于SELECT 语句生成的记录集,能够实现在记录集中逐行向前或者向后访问数据。使用游标,可以在记录集中的任意位置显示、修改和删除当前记录的数据。1.游标的基本操作游标
21、的基本操作包含5部分内容:声明游标、打开游标、提取数据、关闭游标和释放游标。351.游标的基本操作1)声明游标)声明游标游标在使用之前需要声明,以建立游标。声明游标的语法格游标在使用之前需要声明,以建立游标。声明游标的语法格式为:式为:DECLAREcursor_nameCURSORLOCAL|GLOBALFORWARD_ONLY|SCROLLSTATIC|KEYSET|DYNAMIC|FAST_FORWARDREAD_ONLY|SCROLL_LOCKS|OPTIMISTICTYPE_WARNINGFORselect_statementFORUPDATEOFcolumn_name,.n361.
22、游标的基本操作2)打开游标创建游标之后,使用之前需要打开游标,才能从游标中提取数据。打开游标的语法格式为:OPEN cursor_name游标在打开状态下,不能再被打开,也就是OPEN命令只能打开已声明但尚未打开的游标。打开一个游标以后,可以使用全局变量ERROR判断打开操作是否成功,如果返回值为0,表示游标打开成功,否则表示打开失败。当游标被成功打开时,游标位置指向记录集的第一行之前。游标打开成功后,可以使用全局变量CURSOR_ROWS返回游标中的记录数。371.游标的基本操作3)提取数据游标被成功打开后,就可以使用FETCH命令从中检索特定的数据。提取游标中数据的语法格式为:FETCHN
23、EXT|PRIOR|FIRST|LAST|ABSOLUTEn|RELATIVEnFROM cursor_name INTO Variable_name ,.n 381.游标的基本操作4)关闭游标游标使用完毕后,应该关闭游标,释放当前结果集,以便释放游标所占用的系统资源。关闭游标语法格式为:CLOSE cursor_name关闭游标后,系统删除了游标中所有的数据,所以不能再从游标中提取数据。但是,可以再使用OPEN命令重新打开游标使用。在一个批处理中,可以多次打开和关闭游标。391.游标的基本操作5)释放游标)释放游标如果一个游标确定不再使用时,可以将其删除,彻底释放游如果一个游标确定不再使用时,可以将其删除,彻底释放游标所占系统资源。释放游标的语法格式为:标所占系统资源。释放游标的语法格式为:DEALLOCATEcursor_name释放游标即将其删除,如果想重新使用游标就必须重新声明释放游标即将其删除,如果想重新使用游标就必须重新声明一个新的游标。一个新的游标。
限制150内