使用Transact-SQL编程-SQLServ.ppt
第3章 使用Transact-SQL编程,授课人:吴志霞电话:,课程内容,1.Transact-SQL基础 2.变量的使用 3.流程控制语句 4.错误处理 5.存储过程,课程目标,掌握Transact-SQL,课时安排,理论:4学时上机:4学时,授课重点,1.Transact-SQL基础 2.变量的使用 3.流程控制语句 4.错误处理 5.存储过程,变量的申明,语法格式 Declare 变量名 数据类型默认值为空值用户自己定义的变量为局部变量 系统还提供一种全局变量,系统用它来存储SQL Server配置的设定值和统计数据,参看书192页。,变量赋值,语法格式:SET 变量名=表达式 或SELECT 变量名=表达式,使用示例,【例】新建一个名称为myVar的变量,然后将一个字符串值存放到变量中去,最后输出这个变量。语句如下:DECLARE myVar char(20)-定义myVar变量,长度为20字符SET myVar=测试SET赋值语句SELECT myVarGO【例】将查询语句返回的结果赋给变量。语句如下:USE SLGODECLARE myVar intSET myVar=(SELECT COUNT(*)FROM student)-将查询结果赋给变脸myVar,授课重点,1.Transact-SQL基础 2.变量的使用 3.流程控制语句 4.错误处理 5.存储过程,3 流程控制语句,3.1 IF语句3.2 BEGIN语句3.3 WHILE语句3.4 Goto语句,3.1 IF语句,IF语句提供条件判断功能。其语法格式如下:IF ELSE其中:ELSE是可选的。,IF语句(示例),【例】如果学校学生人数大于5则显示“学校学生人数大于5”,否则显示“学校学生人数小于等于5”。,IF(SELECT count(*)FROM student)5 PRINT 学生人数大于5 ELSE PRINT 学生人数小于5,3.2 BEGIN语句,单条SQL语句不能满足用户的要求,需要使用多条SQL语句。语法格式:BEGINEND,BEGIN语句(示例),【例】在上例的基础上,还要让当学生总人数大于5时显示Student表的全部信息。,IF(SELECT count(*)FROM student)5 begin PRINT 学生人数大于5 select*from employee end ELSE PRINT 学生人数小于5,3.3 WHILE语句,语法格式如下:WHILE BREAKCONTINUE注意:BREAK表示从最内层的WHILE循环中退出,并将执行出现在END关键字后面的任何SQL语句。CONTINUE表示从WHILE循环重新开始执行,跳过CONTINUE关键字后的任何SQL语句。,3.4 Goto语句,Goto语句直接将执行流变更到标签处,跳过Goto之后的Transact-SQL语句,在标签处继续处理。Goto语句语法形式为:Goto label1lablel1:,Goto语句(示例),【例】使用Goto语句做1到6的累加运算。语句如下:DECLARE sum int,Number int-声明变量SET sum=0-变量赋初值SET Number=1-变量赋初值Label_1:-定义标签Label_1SELECT sum=sum+Number-累加计数SELECT Number=Number+1-指向下一个需要累加的数IF Number 6-判断累加是否越界Goto Label_1-没有越界则继续累加SELECT sum-显示累加结果,4 错误处理,4.1 使用Error4.2 使用RowCount,4.1 使用Error,Error是一个全局变量,系统将最近一条T-SQL语句的执行状态存放到其中,,4.2 使用RowCount,RowCount来检测SQL语句执行所影响的行数【例】将student表中性别为女的记录的sage字段值都加1。,UPDATE studentSET sage=sage+1where ssex=女IF RowCount=0Print 给定条件的记录不存在,授课重点,1 Transact-SQL基础2 变量的使用3 流程控制语句4 错误处理5 存储过程,5 存储过程的创建与调用,create语句可以用来创建存储过程。示例如下:CREATE PROCEDURE p_Student1 as Declare maxAge intDeclare minAge int Declare lcount intUPDATE StudentSET Sage=Sage+1where Ssex=女IF RowCount=0 Print 给定条件的记录不存在ELSE begin Print 给定条件的记录存在 select maxAge=max(sage)from student where ssex=女 select minAge=min(sage)from student where ssex=女 select lcount=count(*)from student where ssex=女 set maxAge=maxAge+1-得到最大齡 select maxAge,minAge,lcount-return maxAge endGO,调用存储过程:exec p_student1,创建含input参数的存储过程,CREATE PROCEDURE p_Student2(sno char(9)AS Declare sname char(20)Select sname=sname from Student where sno like snoif sname is null print 无此记录else select snameGO,调用存储过程:,EXEC p_student2 200215119,创建含output参数的存储过程示例,CREATE PROCEDURE p_Student3(sno char(9),sname char(20)output)AS Select sname=sname from Student where sno like snoif sname is null print 无此记录else returnGO,declare sname char(20)exec p_student3 200215119,sname output select sname,调用存储过程:,总结,1.Transact-SQL基础 2.变量的使用 3.流程控制语句 4.错误处理 5.存储过程,