期末第5章-(Transact-SQL、存储过程等).ppt
《期末第5章-(Transact-SQL、存储过程等).ppt》由会员分享,可在线阅读,更多相关《期末第5章-(Transact-SQL、存储过程等).ppt(132页珍藏版)》请在三一办公上搜索。
1、1,本章主要内容:T-SQL的基本语法 存储过程(难点)触发器(难点),第5章 Transact-SQL、存储过程和触发器,2,5.1 Transact-SQL语言,5.1.1 数据类型,数据类型见表5-1。下面做一些必要的说明。1.整型(Bigint、Int、Smallint、tinyint)整型数参与任何算术运算的结果只保留数值的整数部分。DECLARE n1 int,n2 int,n3 int-变量的声明SET n1=14SET n2=3SET n3=n1/n2-n3=4SELECT n1 AS n1,n2 AS n2,n3 AS n3-起别名,3,5.1.1 数据类型,2.浮点型(fl
2、oat、real、Decimal、Numerc)float和real属于近似数据类型。特点是表示范围大,但任何一个数都仅是一个近似值。适合用于科学计算。Decimal和Numerc是精确数值类型,表示的是一个精确值。适合用于财务金融(如:工资)。,5.1.1 数据类型,4,5.1.1 数据类型,Decimal和Numeric的表示范围和精度及所占内存都一样,为与ANSI标准兼容SQL Server支持这两种表示。Decimal(p,s):p表示总位数(不包括小数点),介于138之间,默认值为18。s表示小数点后的位数,默认值是0。参数间关系:0=sp。注:最好在WHERE子句中不要引用floa
3、t类型的字段。,5.1.1 数据类型,5,5.1.1 数据类型,3.字符型 Char、Varchar、Text;Nchar、Nvarchar、Ntext(双字节字符型)Text 和Ntext用于存储大块文字。,4.Unicode Unicode是双字节编码标准,一个字符占2个字节。,5.1.1 数据类型,6,5.1.1 数据类型,5.日期时间型Datetime、Smalldatetime 日期格式有:X/Y/Z X-Y-X X.Y.Z XYZ 中XYZ可以是年月日或月日年,XYZ只能是年月日。,declare d1 datetimeset d1=19881001select d1,5.1.1
4、数据类型,7,5.1.1 数据类型,6.货币数据类型Money、SmallMoney相当于带货币符号的Decimal类型。精确到0.0001货币单位。Money:存储 8 字节,范围 922,337,203,685,477.5808 到 922,337,203,685,477.5807smallmoney:存储4 字节,范围 214,748.3648 到 214,748.3647,5.1.1 数据类型,8,5.1.1 数据类型,7.Bit位类型(也称 逻辑类型)可以取值为 1、0 或 NULL 的整数数据类型。用0表示false,1表示true。特点:(1)不允许建索引;(2)几个位字段可以占
5、用同一个字节。,5.1.1 数据类型,9,5.1.1 数据类型,8.二进制类型(Binary、Varbinary、image)存储二进制数据。常用于存储音频视频图像等字节流式数据。数据表字段中仅存放指针,指向数据实际存放地址。,5.1.1 数据类型,10,5.1.1 数据类型,9.其他类型(Sql_variant、table)Sql_variant:可存储SQL Server支持的所有数据类型(text、ntext、timestamp和Sql_variant除外)值的数据类型。方便SQL Server的开发工作。Table:用于存储对表或视图处理后的结果集。只能用于Transact-SQL用户
6、自定义函数的返回值。,5.1.1 数据类型,11,5.1.2 标识符、变量和运算符,1.标识符 标识符是指用户定义的数据库对象的名称以及变量名称。分为标准标识符和定界标识符。命名规则:长度为1128个字符,不区分大小写字母。可由:汉字、字母、数字、_、$、#字符构成。,12,5.1.2 标识符、变量和运算符,以符号开头的标识符有专门的用途:以开始的标识符,表示局部变量或参数。以#开始的标识符,表示是局部数据库对象。例如,局部临时表或过程等。以两个#开始的标识符,表示全局临时对象。,5.1.2 标识符、变量和运算符,13,5.1.2 标识符、变量和运算符,2.变量 变量分为局部变量和全局变量。(
7、1)局部变量用户定义,在DECLARE语句中声明在SET或SELECT语句中赋值,局部变量声明:DECLARE 变量名 数据类型,变量名 数据类型,5.1.2 标识符、变量和运算符,14,5.1.2 标识符、变量和运算符,SET 变量名1=表达式|(SELECT 子查询),SELECT 变量名1=表达式1|(SELECT 子查询),变量名2=表达式|(SELECT 子查询),SELECT 变量名1=字段表达式1,变量名2=字段表达式2 FROM 表名 WHERE 条件-查询赋值,与查询语句结合使用,局部变量赋值:,或(一条语句为多个变量赋值),或,5.1.2 标识符、变量和运算符,15,5.1
8、.2 标识符、变量和运算符,说明:当子查询结果为多个值时,保留最后那个值赋给变量。如果“子查询”没有返回值,则局部变量值为NULL。一个SET语句只能为一个变量赋值,而一个SELECT语句可为多个变量赋值。,5.1.2 标识符、变量和运算符,16,5.1.2 标识符、变量和运算符,5.1.2 标识符、变量和运算符,17,5.1.2 标识符、变量和运算符,例2:定义变量score、sno、cno,类型分别为 int、char、char,并赋值给它们。,DECLARE score int,sno char(6)DECLARE cno char(6)-变量声明SELECT sno=060111,cn
9、o=0002-变量赋值SELECT score=成绩-查询赋值 FROM 选课 WHERE 学号=sno and 课号=cnoSELECT score AS 成绩-查询变量值,5.1.2 标识符、变量和运算符,18,5.1.2 标识符、变量和运算符,(2)全局变量 系统提供、系统赋值 值报告系统活动信息和连接信息 可以在脚本中引用全局变量由SQL Server系统定义和维护,用户不能给全局变量赋值或直接更改其中的值。全局变量的名字前有两个,即。,5.1.2 标识符、变量和运算符,19,5.1.2 标识符、变量和运算符,全局变量对于检查SQL Server环境的某些信息或条件是有用的。例如:查看
10、SQL Server版本号。SELECT version,5.1.2 标识符、变量和运算符,例如:trancount返回当前活动的事务数。IF(trancount0)PRINT 有事务在运行 ELSE PRINT 无事务在运行,20,3.运算符运算符的类型:算术运算符 比较运算符 字符串连接运算符 逻辑运算符,5.1.2 标识符、变量和运算符,5.1.2 标识符、变量和运算符,21,(1)算术运算符:+、-、*、/、%(求余)(2)比较运算符:=、(不等于)、=、,5.1.2 标识符、变量和运算符,(3)字符串连接运算符:。例如:print asd+dfg+1234 结果为:asddfg123
11、4 空串()作为单个空格处理。例如:abc+efg,结果为abc egf.,5.1.2 标识符、变量和运算符,22,5.1.2 标识符、变量和运算符,(4)逻辑运算符(见表5-6),5.1.2 标识符、变量和运算符,23,5.1.2 标识符、变量和运算符,表5-6(续),5.1.2 标识符、变量和运算符,24,(5)运算符优先级 括号算术运算符(字符串连接符)比较运算符逻辑运算符赋值(由高到低),5.1.2 标识符、变量和运算符,5.1.2 标识符、变量和运算符,25,SQL Server提供了非常丰富的函数供用户使用,同时也允许用户定义自己的函数。,5.1.3 函数,5.1.3 函数,26,
12、1.Transact-SQL提供的系统函数有:,5.1.3 函数,5.1.3 函数,27,函数分为三大类:行集函数(也称表值函数)可以用在SQL语句中“表”出现的任何地方引用行集函数。聚合函数(第4 章介绍过):也称计合函数。,5.1.3 函数,标量值函数:最常用的一类函数。通过有参或无参调用它,可以使其执行并返回单个值。,5.1.3 函数,28,5.1.3 函数,系统提供的函数,参考教材。不再例举。,5.1.3 函数,29,5.1.3 函数,2.用户自定义函数用户可以根据应用需要定义自己的函数。自定义函数分三种:标量函数、内嵌表值函数、多语句表值函数。下面我们介绍前2种。(1)标量函数标量函
13、数指函数返回单个值(字符串数值等).语法格式:见下页。,5.1.3 函数,30,5.1.3 函数,CREATE FUNCTION 函数名(形式参数定义表)RETURNS 函数返回值数据类型ASBEGIN 函数体 RETURN 返回值表达式 END,5.1.3 函数,31,5.1.3 函数,例3 创建一个标量函数,返回某学生的平均分数。学号作为函数参数。,5.1.3 函数,CREATE FUNCTION get_avg(sno char(6)RETURNS int ASBEGIN DECLARE temp int SELECT temp=AVG(成绩)FROM 选课 WHERE 学号=sno R
14、ETURN temp END,32,5.1.3 函数,可以用下列语句调用get_avg函数:SELECT dbo.get_avg(030101)AS 030101平均成绩注意:调用时必须给出用户名dbo。它是函数创建者。,(2)内嵌表值函数 内嵌表值函数指 函数返回值是一个表.语法格式:见下页。,5.1.3 函数,33,5.1.3 函数,CREATE FUNCTION 函数名(形式参数定义表)RETURNS TABLE ASRETURN(SELECT查询语句),函数返回值是一个查询表。,5.1.3 函数,34,5.1.3 函数,例4 创建一个表值函数,返回平均分数大于或等于指定分数的学生学号和
15、平均分数。函数参数为给定的一个“分数”。,5.1.3 函数,CREATE FUNCTION get_all_avg(score int)RETURNS TABLE ASRETURN SELECT 学号,AVG(成绩)AS 平均成绩 FROM 选课 GROUP BY 学号 HAVING AVG(成绩)=score,注意:表达式AVG(成绩)必须给出别名。,35,5.1.3 函数,函数的调用:查询平均成绩大于80分的学生信息。SELECT 学生.学号,姓名,平均成绩FROM get_all_avg(80),学生 WHERE get_all_avg.学号=学生.学号,5.1.3 函数,36,5.1.
16、3 函数,(3)删除用户自定义函数 DROP FUNCTION 函数名(4)修改用户自定义函数 ALTER FUNCTION 函数名 参数定义与代码,5.1.3 函数,37,流程控制语句用于控制SQL语句、语句块、存储过程或触发器的执行流程。主要的流程控制语句有:见下页表。,5.1.4 流程控制语句,5.1.4 流程控制语句,38,5.1.4 流程控制语句,5.1.4 流程控制语句,39,其他Transact-SQL语句还有:(1)/*/:注释语句,用于多行注释(2)-(注释语句):用于单行或嵌套注释(3)DECLARE:变量声明语句。(4)EXECUTE:存储过程执行语句。(5)PRINT:
17、终端输出语句,5.1.4 流程控制语句,5.1.4 流程控制语句,40,1.BEGIN END语句 该语句将多条SQL语句封装在一起,构成一个语句块。主要语句块就可以在IF/ELSE、WHILE等语句中作为一个整体来执行。语法格式:,5.1.4 流程控制语句,BEGIN 若干SQL语句END,5.1.4 流程控制语句,41,5.1.4 流程控制语句,2.IFELSE语句 语法格式:,IF 条件 语句|语句块1 ELSE 语句|语句块2,5.1.4 流程控制语句,42,5.1.4 流程控制语句,例5 查询选修0001课的学生成绩,如有大于90分以上的,则将其姓名显示出来;若无人大于90分,则显示
18、“成绩优秀者为0个”。,IF EXISTS(SELECT*FROM 选课 WHERE 课号=0001 AND 成绩=90)SELECT 姓名 FROM 学生 JOIN 选课 ON 学生.学号=选课.学号 WHERE 课号=0001 AND 成绩=90ELSE PRINT 成绩优秀者为0个,5.1.4 流程控制语句,43,3.WHILE语句语法格式:,5.1.4 流程控制语句,5.1.4 流程控制语句,44,5.1.4 流程控制语句,例6 引用已建函数get_all_avg,分别求出平均成绩大于60、70、80、90的学生成绩信息。,5.1.4 流程控制语句,45,5.1.4 流程控制语句,DE
19、CLARE j intSET j=60WHILE j100BEGIN SELECT*,j as 平均成绩 大于 FROM get_all_avg(j)SET j=j+10END,5.1.4 流程控制语句,46,*4.WAITFOR语句WAITFOR语句可以指定在某一时间点或时间间隔后执行SQL语句、语句块、存储过程或事务。,5.1.4 流程控制语句,语法格式:WAITFOR DELAY time|TIME time,time 格式为:hh:mm:ss。,5.1.4 流程控制语句,47,例7 对学生选课关系(1)设置在9:00执行一次查询操作;(2)再设置在2小时以后再执行一次查询操作,查看学生
20、选课情况。,5.1.4 流程控制语句,BEGIN WAITFOR TIME 9:00-等到9点 SELECT 学号,课号 FROM 选课ENDGOBEGIN WAITFOR DELAY 2:00-延迟2小时 SELECT 学号,课号 FROM 选课END,5.1.4 流程控制语句,48,5.RETURN语句RETURN无条件退出语句。可在任何时候用于从过程、批处理或语句块中退出。不执行位于 RETURN 之后的语句。,5.1.4 流程控制语句,格式:RETURN 整数表达式,RETURN语句可以返回整数值。一般用于表示存储过程或应用程序的执行状态。如,所有系统存储过程返回 0 值表示成功,返回
21、非零值则表示失败。注意:当用于存储过程时,RETURN 不能返回空值。,5.1.4 流程控制语句,49,6.CASE 表达式CASE 表达式用于多分支结构,有两种语法格式。(1)简单CASE表达式,5.1.4 流程控制语句,CASE 表达式WHEN 表达式1 THEN 结果表达式1 WHEN 表达式n THEN 结果表达式nELSE 结果表达式n+1END,5.1.4 流程控制语句,50,说明:可以是常量、属性名、函数、子查询和算术运算符、字符串运算符等组合的有意义的式子。是在多个中选择一个表达式,它的值作为“CASE表达式”的结果值。当所有匹配都不成立,CASE则返回NULL。可以只有 一个
22、WHEN子句。是一个表达式,可以用在可以出现的任何地方。,5.1.4 流程控制语句,5.1.4 流程控制语句,51,5.1.4 流程控制语句,5.1.4 流程控制语句,52,例8 将百分制分数按优、良、中、及格和不及格五个等级记分制的形式输出。,5.1.4 流程控制语句,SELECT 学号,课号,成绩=CASE 成绩/10WHEN 6 THEN 及格WHEN 7 THEN 中WHEN 8 THEN 良WHEN 9 THEN 优WHEN 10 THEN 优ELSE 不及格ENDFROM 选课,说明:整数除整数得到整数(系统自动取整)验证:Select 10/2,5.1.4 流程控制语句,53,(
23、2)搜索型CASE表达式,5.1.4 流程控制语句,CASEWHEN 条件表达式1 THEN 结果表达式1WHEN 条件表达式n THEN 结果表达式nELSE 结果表达式n+1END,功能:得到一个满足条件的值。如下图所示。,5.1.4 流程控制语句,54,5.1.4 流程控制语句,5.1.4 流程控制语句,55,例9 将百分制分数按优、良、中、及格和不及格五个等级记分制的形式输出。,5.1.4 流程控制语句,SELECT 学号,课号,成绩=CASE WHEN 成绩/10=6 THEN 及格 WHEN 成绩/10=7 THEN 中 WHEN 成绩/10=8 THEN 良 WHEN 成绩/10
24、=9 THEN 优 WHEN 成绩/10=10 THEN 优 WHEN 成绩/10 IS NULL THEN 无成绩 ELSE 不及格 ENDFROM 选课,5.1.4 流程控制语句,56,7.批处理和脚本(1)批处理批处理是作为一个组一起提交并执行的若干Transact-SQL语句。批处理可以交互地运行,或作为脚本的一部分运行。一个脚本可以包含多个Transact-SQL批处理。,5.1.4 流程控制语句,5.1.4 流程控制语句,57,使用GO语句定义一个批处理。使用GO语句表示一个批处理的结束。GO 不是通用的Transact-SQL语句,是只有SQL Server查询分析器和osql实
25、用程序接受的语句。,5.1.4 流程控制语句,5.1.4 流程控制语句,58,SQL Server如何处理批处理 SQL Server统一优化、编译和执行一个批处理中的语句,但是,这些语句并不构成一个事务,不必作为一个可恢复单元执行。用户定义的变量作用域限制在一个批处理,所以变量不能在GO语句后引用。,5.1.4 流程控制语句,5.1.4 流程控制语句,59,例如:USE 教学数据库GOCREATE VIEW 成绩_V1(学号,平均成绩)AS SELECT 学号,AVG(成绩)FROM 选课 GROUP BY 学号 GOSELECT*FROM 成绩_V1GO,5.1.4 流程控制语句,5.1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期末 Transact SQL 存储 过程
链接地址:https://www.31ppt.com/p-6300550.html