Transact sql

上传人:德****1 文档编号:1093087 上传时间:2017-05-27 格式:PPT 页数:60 大小:303KB
返回 下载 相关 举报
Transact sql_第1页
第1页 / 共60页
Transact sql_第2页
第2页 / 共60页
Transact sql_第3页
第3页 / 共60页
Transact sql_第4页
第4页 / 共60页
Transact sql_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《Transact sql》由会员分享,可在线阅读,更多相关《Transact sql(60页珍藏版)》请在金锄头文库上搜索。

1、SQL Server 数据库原理及应用,主编:曾长军副主编:朱剑锋 刘坤 SQL Server 数据库原理及应用配套课件,第六章 Transact-SQL,讲解提纲,6.1 常量 6.2 变量 6.3 数据类型 6.4 运算符与表达式 6.5 流程控制语句 6.6 系统内置函数 6.7 用户自定义函数,6.1 常 量,6.1.1 关于SQL标识符6.1.2 常量,6.1.1 关于SQL标识符,SQL标识符由用户定义的SQL Server可识别的有特定意义的字符序列。用户定义SQL标识符时必须遵循以下规则。标识符的长度为1128个字符。 可以使用的字符包括字母、数字、#、$、和下划线“_”。 一

2、般标识符不能包含空格,也不能使用SQL的关键字。,6.1.2 常量,常量指在程序运行过程中值不变的量。根据常量值的不同类型,分为以下几种:1字符串常量字符串常量分为ASCII常量和Unicode常量。2整型常量按照整型常量的不同表示形式,可以分为二进制型、十进制型和十六进制型。3实型常量实型常量有定点表示和浮点表示两种方式。,4日期时间型常量日期时间型常量要用单引号括起来。5货币型常量货币型常量实际上是以“$”作为前缀的整型或实型数据,如$27,$3.45。6uniqueidentifier常量uniqueidentifier常量可以使用字符或十六进制字符串指定,如0x345ffa8ce232

3、。,6.2 变 量,6.2.1 全局变量6.2.2 局部变量,变量指的是在程序运行过程中值可以发生变化的量,可以用它保存在程序运行过程中的计算结果或者是输入输出结果。定义和使用变量时要注意以下几点: 遵循“先定义再使用”的原则; 定义一个变量包括用合法的标识符作为变量名和指定变量的数据类型; 建议给变量取名时能代表变量用途的标识符。在SQL Server中变量分为全局变量和局部变量。,6.2.1 全局变量,在SQL Server中,全局变量以作为前缀,通常被SQL服务器用来跟踪服务器范围和特定会话期间的信息,所以不能被显式地赋值和声明。1rowcount记录前一条SQL Server语句处理的

4、记录的行。比如执行了一个SELECT语句后会得到许多记录,那么这个记录的行数就由rowcount保存。,【例6-1】检查查询语句执行后变量rowcount的值是否为0,不为0,显示信息“rows found!”。SELECT student_Name ,tele_NumberFROM student_InfoWHERE student_Sex=男IF rowcount0 PRINT rows found!2error每条Transact-SQL语句执行后,服务器会赋值给这个变量一个整型值:0,表示Transact-SQL语句执行过程没有错误,否则就表示语句执行失败。,6.2.2 局部变量,局部

5、变量一般用在批处理、存储过程和触发器中。1局部变量的声明语法:DECLARE 变量名 数据类型,参数说明: DECLARE关键字用于声明局部变量。 局部变量名前面必须加上字符“”用于表明该变量名是局部变量。 同时声明几个变量时彼此间需要用“,”分隔。,2局部变量的赋值可以借助以下几种方法给局部变量赋值。 通过SET来赋值语法:SET 变量名=表达式参数说明: 局部变量没有赋值时其值是NULL。 不能在一个SET语句中同时对几个变量赋值,如果要想借助SET给几个变量赋值,那么就不得不分开来写。,【例6-2】按要求编写程序。先定义了一个INT类型NUM变量,CHAR类型CNUM变量,然后分别赋值2

6、004,最后使用PRINT语句将这两个变量的值输出。DECLARE NUM INT,CNUM CHAR(10)SET NUM=2004SET CNUM=2004PRINT NUMPRINT CNUM,6.3 数 据 类 型,6.3.1 系统数据类型(略)6.3.2 用户定义数据类型,6.3.2 用户定义数据类型,用户可以自己定义数据类型,但实际上也是建立在SQL Server系统所提供的数据类型基础之上的。用户自定义数据类型只有在它们被定义的数据库中才是可用的。如果想要在用户所定义的数据库中都可以使用,那么就要把它定义到model数据库中。,1利用系统存储过程定义和删除用户自定义数据类型。语法

7、: 定义用户自定义数据类型sp_addtype typename= type,phystype= system_data_type,nulltype= null_type,owner=owner_name 删除用户自定义数据类型sp_droptype typename= type,2参数说明 sp_addtype是创建用户自定义数据类型的系统存储过程,所带参数的含义如下:1)字符串typename=称为占位符,可写可不写。2)type:新的数据类型的名称。这个名称在数据库必须是惟一的。3)system_data_type:新的数据类型所依赖的系统数据类型,必须用单引号括起来。4)null_ty

8、pe:新的数据类型处理空值的方式,可以取NOT NULL或NULL。默认值是NULL。5)owner_name:新的数据类型的所有者。没有指定时为当前用户。, sp_droptype是删除用户自定义数据类型的系统数据类型。type指要删除的数据类型的名称,必须用单引号括起来。 如果某个列使用了用户自定义数据类型,或者某个规则或默认值对象绑定到该数据类型(参看第7章),那么sp_droptype是删除不了的。,【例6-5】利用sp_addtype定义一个新的数据类型phone。Exec sp_addtype phone,char(10)所定义的数据类型名称是phone,基于char(10)。【例

9、6-6】利用sp_addtype定义一个新的数据类型birthday。Exec sp_addtype birthday, datetime, NULL所定义的数据类型名称是birthday,基于datetime。,2利用企业管理器定义和删除用户自定义数据类型(略) 3使用用户自定义数据类型 用户自定义数据类型创建好后,可以像系统数据类型一样使用。 CREATE TABLE student_Info( student_ID INT not null PRIMARY KEY, student_Name CHAR(10) NULL, student_Sex CHAR(2) NOT NULL, bor

10、n_Date birthday, class_NO INT, tele_Number phone, ru_Date DATETIME, address VARCHAR(50), comment VARCHAR(200),6.4 运算符与表达式,1算术运算符算术运算符用于数值型字段和变量之间的算术运算,包括+、*、/、%(取模)。2位运算符位运算符包括&(与)、|(或)、(异或)、(求反)运算符,并按照表6-1所示的运算规则对数据进行按位运算。注意求反运算符是一元操作符。【例6-7】打印1与1按位求异或运算的结果。DECLARE a bitSET a=11PRINT a,3比较运算符比较运算符应

11、用的非常多,它用来测试两个表达式的值是否相等。测试的结果返回一个布尔值。系统提供的比较运算符包括:=(等于)、(大于)、=(大于等于)、=(小于等于)、!=(不等于)、(不等于)、!(不大于)。4逻辑运算符逻辑运算符一般构成复杂的逻辑表达式。,5字符串连接运算符通过字符串连接运算符“+”可以实现多个字符串的连接。【例6-8】查看2000年入学的学生姓名和学号,要求两者要作为一列结果输出。Use StudentSELECT (CAST(student_ID AS char(8)+SPACE(1) +-+SPACE(1)+student_Name ) AS 学号及姓名FROM student_In

12、foWHERE LEFT(CAST(student_ID AS char(8),4)=2000,6.5 流程控制语句,6.5.1 BEGINEND语句6.5.2 IFELSE语句6.5.3 无条件转移(GOTO)语句6.5.4 WHILE、BREAK和CONTINUE语句6.5.5 RETURN语句6.5.6 WAITFOR语句,6.5.1 BEGINEND语句,1语法BEGIN SQL语句 SQL语句 END2参数说明 将要组合成语句块的语句放在BEGIN和END之间就可以了。这类似于C语言中的作用。 BEGINEND可以嵌套使用。,6.5.2 IFELSE语句,1语法IF 布尔表达式 SQ

13、L语句块ELSE SQL语句块2参数说明 ELSE并不一定是必需的。 布尔表达式取真值时执行IF后面的语句块,取假值时执行ELSE后面的语句块。 IFELSE语句可以嵌套。此时需要注意嵌套的层次以及IF与哪一个ELSE配对的 问题。,【例6-9】编写程序完成如下功能:查看有无班级号为200001的班级,有则将这个班的学生信息全部输出,否则输出提示用户没有找到的信息。IF EXISTS(SELECT * FROM class_info WHERE class_No=200001) BEGIN SELECT * FROM student_Info WHERE class_No=200001 END

14、ELSE PRINT No student information for class2000001,6.5.3 无条件转移(GOTO)语句,1语法GOTO labellabel:2参数说明 GOTO语句会强迫服务器从标号处开始继续执行程序。 label标号必须出现在同一个存储过程或批处理中。 过多的使用GOTO会导致程序质量的下降,并且可读性很差。因此建议可以使用IFELSE,WHILE语句的地方就尽量不要使用GOTO。,【例6-10】下面的程序先从result_Info表中取得course_No为1的记录数目,然后用它完成了一个GOTO语句。注意该程序是如何避免陷入GOTO的死循环的。DE

15、CLARE MaxCounter INT,Counter INTSELECT MaxCounter=count(*), Counter=1FROM result_Info WHERE course_No=1LOOP:IF CounterMaxCounterBEGIN SELECT Counter SET Counter=Counter+1 GOTO LOOPEND,6.5.4 WHILE、BREAK和CONTINUE语句,1语法WHILE 布尔表达式 SQL语句块 BREAK SQL 语句块CONTINUE2参数说明 布尔表达式返回真或假值来决定是否执行循环体中的语句。 BREAK导致从最内层WHILE循环中退出,执行该层循环的END关键字后面的任何语句。 CONTINUE用在循环语句中,结束本次循环,重新转到下一次循环条件的判断。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号