《第4章--T-SQL语言基础课件.ppt》由会员分享,可在线阅读,更多相关《第4章--T-SQL语言基础课件.ppt(105页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第四章第四章 Transact-SQL语言基础语言基础本章的学习目标:了解Transact-SQL语言的发展过程理解Transact-SQL语言附加的语言元素掌握常量、变量、运算符和表达式掌握流程控制语句掌握常用函数4.1 工作场景导入软件测试员小李要测试数据库的性能,当学生选课表的数据达到10万行,系统是否反应还会很快?如何才可以快速方便的为学生选课表添加10万行数据?引导问题:为学生选课表添加10万行数据时,(1)如何产生10万行不同的随机数据?(2)为考虑系统性能,应考虑多少行数据提交1次?(3)如何使用WHILE循环?4.2 Transact-SQL概述SQL的全称为Structur
2、ed Query Language(结构化查询语言),SQL最早是在20世纪70年代由IBM公司开发出来的,主要用于关系数据库中的信息检索,它的前身是关系数据库原型系统System R所采用的SEQUEL语言。SQL有3个主要标准:ANSI SQL;SQL92;SQL99。4.2.1 Transact-SQL4.2.1 Transact-SQL语法约定语法约定约定用途大写Transact-SQL关键字。斜体用户提供的Transact-SQL语法的参数。粗体数据库名、表名、列名、索引名、存储过程、实用工具、数据类型名以及必须按所显示的原样键入的文本。下划线指示当语句中省略了包含带下划线的值的子句
3、时应用的默认值。|(竖线)分隔括号或大括号中的语法项。只能使用其中一项。 (方括号)可选语法项。不要键入方括号。 (大括号)必选语法项。不要键入大括号。,.n指示前面的项可以重复n次。各项之间以逗号分隔。.n指示前面的项可以重复n次。每一项由空格分隔。;Transact-SQL语句终止符。虽然在此版本的SQL Server中大部分语句不需要分号,但将来的版本需要分号。 := 语法块的名称。此约定用于对可在语句中的多个位置使用的过长语法段或语法单元进行分组和标记。可使用语法块的每个位置由括在尖括号内的标签指示:。4 4.2.2.2.2 多部分名称多部分名称所有对数据库对象名的Transact-S
4、QL引用将是由四部分组成的多部分名称,格式如下:server_name.database_name.schema_name.object_name| database_name .schema_name.object_name| schema_name . object_name| object_name各个参数的含义如下所示:(1)server_nameserver_name指定链接的服务器名称或远程服务器名称。(2)database_name如果对象驻留在SQL Server的本地实例中,则database_name指定SQL Server数据库的名称。如果对象在链接服务器中,则datab
5、ase_name将指定OLE DB目录。(3)schema_name如果对象在SQL Server数据库中,则schema_name指定包含对象的架构的名称。如果对象在链接服务器中,则schema_name将指定OLE DB架构名称。(4)object_nameobject_name表示对象的名称。4 4.2.3 .2.3 如何给标识符起名如何给标识符起名SQL Server将标识符分为以下两种类型。将标识符分为以下两种类型。1. 常规标识符常规标识符(1)标识符的首字符必须是下列字符之一)标识符的首字符必须是下列字符之一 。l 统一码(统一码(Unicode)2.0标准中所定义的字母,包括拉
6、丁字母标准中所定义的字母,包括拉丁字母a-z和和A-Z,以及其他语言的字母字符。以及其他语言的字母字符。l 下划线下划线“_”、符号、符号“”或者数字符号或者数字符号“#”。(2)标识符的后续字符可以是以下)标识符的后续字符可以是以下3种。种。l 统一码(统一码(Unicode)2.0标准中所定义的字母。标准中所定义的字母。l 来自拉丁字母或其他国家来自拉丁字母或其他国家/地区脚本的十进制数字。地区脚本的十进制数字。l “”符号、美元符号符号、美元符号“$”、数字符号、数字符号“#”或下划线或下划线“_”。(3)标识符不允许是)标识符不允许是Transact-SQL的保留字。的保留字。(4)不
7、允许嵌入空格或其他特殊字符。)不允许嵌入空格或其他特殊字符。2. 2. 分隔标识符分隔标识符分隔标识符类型有两种:分隔标识符类型有两种:l 双引号(“”)内的标识符l 方括号( )内的标识符 该标识符可以不符合标识符的格式规则,如该标识符可以不符合标识符的格式规则,如MR GZGLXT、MR和和GZGLXT之间含有空格,但因为使用了方括号,所以视为分隔之间含有空格,但因为使用了方括号,所以视为分隔标识符。标识符。注意:常规标识符和分隔标识符包含的字符数必须在注意:常规标识符和分隔标识符包含的字符数必须在1128之间,对于本地临时表,标识符最多可以有之间,对于本地临时表,标识符最多可以有116个
8、字符。个字符。 4 4.2.4 .2.4 系统保留字系统保留字与其他许多语言类似,SQL Server 2014使用了180多个保留关键字(Reserved Keyword)来定义、操作或访问数据库和数据库对象。这些保留关键字是T-SQL语法的一部分,用于分析和理解T-SQL语言,包括DATABASE、CURSOR、CREATE、INSERT、BEGIN等。一般地,不能使用这些保留关键字作为对象名称或标识符。在编写T-SQL语句时,为了方便用户区分,这些系统保留字会以不同的颜色标记。4.3.1 字符串型常量字符串型常量字符串型常量是定义在单引号中的字母、数字及特殊符号,字符串型常量是定义在单引
9、号中的字母、数字及特殊符号,如!、如!、#。lASCII字符串常量:字符串常量:由单引号括起来的ASCII字符组成。 如果在字符常量中已经包含了一个单引号,那么可以使如果在字符常量中已经包含了一个单引号,那么可以使用两个单引号表示这个带单引号的字符用两个单引号表示这个带单引号的字符,例如例如“SQL”表示表示SQL。 lUnicode字符串常量:字符串常量:格式与ASCII字符串常量相似,但它前面有一个前缀N,而且必须是大写的。 如:N数据库原理、N计算机。4.3 常量4.3.2 数值型常量数值型常量数值型常量包含整型常量和实数型常量。数值型常量包含整型常量和实数型常量。l整型常量整型常量(I
10、nteger)用来表示整数。用来表示整数。可细分为二进制整型常量、十进制整型常量和十六进制整型常量。二进制整型常量以数字0或1表示;十进制整型常量即不带小数点的十进制数;十六进制整型常量由前缀0 x后跟十六进制数组成。l实数型常量用来表示带小数部分的数。实数型常量用来表示带小数部分的数。有定点数和浮点数两种表示方式,其中浮点数使用科学记数法来表示。如:0.56E-3。4.3.3 日期时间型常量日期时间型常量(DATETIME)日期时间型常量使用特定格式的字符日期值来表示,日期时间型常量使用特定格式的字符日期值来表示,并且用单引号括起来。并且用单引号括起来。如:2017年9月20日可以用以下方示
11、:September 20,2017、09/20/2017或20170920。3.3.4 货币型常量货币型常量(MONEY)货币型常量以前缀货币型常量以前缀“$”作为标识。作为标识。如:$123.45。4.4.1 变量名称变量名称变量的命名规则:变量的命名规则:l第一个字符必须是字母、数字、下画线或第一个字符必须是字母、数字、下画线或符号。需要注意的是,符号符号。需要注意的是,符号“”开头的变量表示局部变量、符号开头的变量表示局部变量、符号“”开头的变量表示全局变量。开头的变量表示全局变量。l变量名不能是变量名不能是T-SQL语言的系统保留字语言的系统保留字(如如IF、ELSE、CONTINU
12、E等等),包括,包括大写和小写形式。大写和小写形式。l变量名中不允许出现空格或其他特殊字符。变量名中不允许出现空格或其他特殊字符。根据以上规则,下列变量名都是合法的:根据以上规则,下列变量名都是合法的:b6、abc、class_3和和average。变量声明:变量声明:使用变量需要先声明再使用使用变量需要先声明再使用格式:格式:DECLARE 变量名称变量名称 变量的数据类型变量的数据类型 ,nl 为表示局部变量,变量名称的第一个字符必须是为表示局部变量,变量名称的第一个字符必须是l 所有变量在声明后均设置初值为所有变量在声明后均设置初值为NULL4.4 变量 4.4.2 变量赋值变量赋值有两
13、种为变量赋值的方式:使用有两种为变量赋值的方式:使用SET语句直接为变量赋值和使用语句直接为变量赋值和使用SELECT语句选择表中的值来为变量赋值。语句选择表中的值来为变量赋值。语法格式如下:语法格式如下:l格式格式1:使用:使用SET语句赋值语句赋值SET 变量名称变量名称=表达式表达式l格式格式2:使用:使用SELECT语句赋值语句赋值SELECT 变量名称变量名称=表达式表达式 ,n说明:说明:表达式可以是任何有效的表达式可以是任何有效的SQL表达式;表达式;一个一个SELECT语句可以给多个变量赋值,而一个语句可以给多个变量赋值,而一个SET语句一次只能给一个语句一次只能给一个变量赋值
14、。变量赋值。【例】用赋值语句分别定义两个整型变量x和y。使x的值为36,y的值为9,计算并显示x,y,3x +4y,xy,和x /y的值。declare x int,y intset x=36set y=9select x,y,3*x+4*y,x*y,x/ygo【例】创建两个局部变量,并赋值,然后输出变量的值。declare var1 char(10),var2 char(20)set var1=郑州大学set var2=var1+是一所双一流大学select var1,var2go【例】创建一个名为sex的局部变量,并在select语句中使用该局部变量查找表student中所有男同学的信息。
15、use xscjdeclare sex char(2)set sex =男select * from studentwhere ssex= sexgo【例】使用查询给变量赋值。use xscjdeclare xm varchar(8)set xm =(select sname from student where sno=2008056103)select xmgouse xscjdeclare xm varchar(8)select xm =sname from studentselect xmgo说明:如果返回多个值,将返回的最后一个值赋给变量说明:如果返回多个值,将返回的最后一个值赋给变
16、量【例】use xscjdeclare xm varchar(8)select xm=张三select xm=sname from studentwhere sno=123456789select xm as namego说明:如果说明:如果select语句没有返回行,变量将保留当前值语句没有返回行,变量将保留当前值SQL Server 2014提供以下几类运算符:算术运算符、关系运算符、提供以下几类运算符:算术运算符、关系运算符、逻辑运算符、连接运算符和位运算符。逻辑运算符、连接运算符和位运算符。1. 算术运算符算术运算符算术运算符对两个表达式执行数学运算。算术运算符对两个表达式执行数学运算
17、。算术运算符说 明+加法运算-减法运算*乘法运算/除法运算,如果两个表达式都是整数,则结果是整数,小数部分被截断%(求模)求模(求余)运算,返回两数相除后的余数算术运算符算术运算符4.5 运算符和表达式4.5.1 运算符运算符【例】计算8/5、8.0/5.0、5/8、5.0/8.0与8%5的值。select 8/5,8.0/5.0,5/8,5.0/8.0,8%511.60000000.6250003通过执行语句我们注意到:8/5的结果为1,而8.0/5.0的结果为1.600000,两者运算结果并不相同。原因在于当两个具有相同数据类型的数进行算术运算时,运算结果依然是当前的数据类型。但是,当两个
18、不同数据类型的数进行算术运算时,数据类型优先级规则指定将优先级较低的数据类型转换为优先级较高的数据类型。这样能够在最大程度上保护运算结果的正确性和合理性。同样,5/8与5.0/8.0的运算结果也不相同。2. 关系运算符关系运算符关系运算符说 明实 例=相等姓名=”李华”大于成绩90小于年龄=大于等于成绩=60=小于等于工资=2000、!=不等于所属院系数学系!不小于学分!不大于成绩!100说明:l两个数值型数据比较时,按照值的大小直接比较;l两个日期时间型数据比较时,按照年、月、日的先后顺序比较;l两个字符型数据比较时,英文字母按照ASCII码值大小比较,汉字按照拼音先后顺序比较。【例】使用关
19、系运算符查询use xscjdeclare student char(6)set student=001111if(student0)select * from xs where 学号=studentgo3. 逻辑运算符逻辑运算符运 算 符运 算 规 则AND与运算,两个操作数均为TRUE时,结果才为TRUEOR或运算,若两个操作数中任何一个为TRUE,则结果为TRUENOT非运算,单目运算,结果值取反ALL每个操作数值都为TRUE时,结果为TRUEANY多个操作数中只要有一个为TRUE,结果为TRUEBETWEEN若操作数在指定的范围内,则运算结果为TRUEEXISTS若子查询包含一些行,则
20、运算结果为TRUEIN若操作数值等于表达式列表中的一个,则结果为TRUELIKE若操作数与某种模式相匹配,则结果为TRUESOME若在一系列操作数中,有些值为TRUE,则结果为TRUE【例】查询成绩高于李华最高成绩的学生姓名、课程名和成绩select sname,cname,gradefrom student join sc join courseon o=oon student.sno=sc.snoand gradeall(select grade from student join sc join course on o=o on student.sno=sc.sno and sname=
21、李华 ) 1) any,all【例】查询成绩高于李华最低成绩的学生姓名、课程名和成绩select sname,cname,gradefrom student join sc join courseon o=oon student.sno=sc.snoand gradeany(select grade from student join sc join course on o=o on student.sno=sc.sno and sname=李华 ) 2) between【例】查询93及94年出生的学生信息select * from studentwhere sbirth between 19
22、93-1-1 and 1994-12-31【例】查询不是93、94年出生的学生信息select * from studentwhere sbirth not between 1993-1-1 and 1994-12-31查询姓王或姓李的学生信息select * from studentwhere sname like 王李%查询不姓王也不姓李的学生信息select * from studentwhere sname like 王李%通配符说明%代表0个或多个字符_代表单个字符 指定范围(如:a-f、0-9或集合abcdef中的任何单个字符指定不属于范围(如:a-f、0-9或集合abcdef中的
23、任何单个字符3) like查询所有选课的学生信息查询所有选课的学生信息select * from studentwhere exists(select * from sc where sno=student.sno)查询没有选课的学生信息查询没有选课的学生信息select * from studentwhere not exists(select * from sc where sno=student.sno)4) exists4. 连接运算符连接运算符 连接运算符连接运算符“+”用于串联两个或两个以上的字符或二进用于串联两个或两个以上的字符或二进制串、列名或者串和列的混合体。制串、列名或者串
24、和列的混合体。select 2255+1188select 2255+1188select 2255+1188说明:当数据类型不相同说明:当数据类型不相同时,转换成优先级别高的。时,转换成优先级别高的。5. 位运算符位运算符 位运算符在两个表达式之间实现按位操作,这两个表达位运算符在两个表达式之间实现按位操作,这两个表达式应该为整型数据类型或与整型兼容的数据类型(如字式应该为整型数据类型或与整型兼容的数据类型(如字符型等,符型等,image类型除外)类型除外)运 算 符运 算 法 则&(位与运算)两个参与运算的位值均为1时,结果位为1,否则为0|(位或运算)两个参与运算的位中只要有一位值为1,
25、结果就为1,否则为0(位异或运算)两个参与运算的位不同时,结果为1,否则为0【例】【例】select 128&129,128|129,128129128:129:1000 00001000 0001 或| 1000 0001128:129:1000 00001000 0001 与&| 1000 0000128:129:1000 00001000 0001 异或 0000 0001优 先 级运 算 符1()括号2一目运算:+(正)、-(负)、(按位取反)3*(乘)、/(除)、%(取模)4+(加)、+(字符串连接)、-(减)5=、=、=、!=、!、!6(位异或)、&(位与)、|(位或)7NOT8A
26、ND9ALL、ANY、BETWEEN、IN、LIKE、OR、SOME6. 运算符的优先顺序运算符的优先顺序 当运算符的级别不同时,先对较高级别的运算符进行运算,然后再对较低级别的运算符进行运算。当一个表达式中运算符的级别相同时,一般按照从左到右的顺序进行运算。当表达式中有括号时,应先对括号内的表达式进行求值;若表达式中有嵌套的括号,则首先对嵌套最深的表达式求值。在在SQL语言中,表达式由标识符、变量、常量、标量函数、子查询语言中,表达式由标识符、变量、常量、标量函数、子查询以及运算符组成。在以及运算符组成。在Microsoft SQL Server 2014中,表达式可以用中,表达式可以用于查
27、询记录的条件等。于查询记录的条件等。1. 字段名表达式字段名表达式l可以是单一的字段名或几个字段的组合,也可以是由字段、作用于字段的集函数和常量的任意算术运算(+、-、*,/)组成的运算公式。l主要包括数值表达式、字符表达式、逻辑表达式、日期表达式4种。2. 目标表达式目标表达式有有4种构成方式:种构成方式:l*,表示选择相应基表或视图的所有字段。l.*,表示选择指定的基表和视图的所有字段。l集函数(),表示在相应的表中按集函数操作和运算。l.,., 表示按字段名表达式在多个指定的表中选择指定的字段。4.5.2 表达式表达式3. 条件表达式条件表达式常用的有以下常用的有以下6种种:(1) 比较
28、大小l 应用比较运算符构成的表达式,主要的比较运算符有:=,=,=,!=,!(不太于),!(不小于),NOT+(与比较运算符同用,对条件求非)。(2) 指定范围l BETWEENAND ,NOT BETWEENANDl 查找字段值在(或不在)指定范围内的记录。BETWEEN后是范围的下限(即低值),AND后是范围的上限(即高值)。(3) 集合l IN,NOT INl 查找字段值属于(或不属于)指定集合内的记录。(4) 字符匹配l LIKE,NOT LIKEESCAPEl 查找指定的字段值与相匹配的记录。(5) 空值lIS NULL,IS NOT NULLl查找字段值为空(或不为空)的记录。lS
29、QL规定:在含有运算符+、-、*、/的算术表达式中,若有一个值是NULL,则该运算表达式的值也是空值;任何一个含有NULL比较操作结果的取值都为“假”。(6) 多重条件 lAND、ORlAND:查找字段值满足所有与AND相连的查询条件的记录lOR:查找字段值满足查询条件之一的记录lAND的优先级高于OR,但可通过括号来改变优先级。通配符说明%代表0个或多个字符_代表单个字符 指定范围(如:a-f、0-9或集合abcdef中的任何单个字符指定不属于范围(如:a-f、0-9或集合abcdef中的任何单个字符4.6 Transact-SQL利器通配符T-SQL语言的通配符可以代替一个或多个字符,通配
30、符必语言的通配符可以代替一个或多个字符,通配符必须与须与LIKE运算符结合使用。运算符结合使用。在Transact-SQL中,可以使用两种类型的注释符:1. 单行注释使用双连字符 “-” 作为注释符时,从双连字符开始到行尾的内容都是注释内容。2. 多行注释使用注释符“/* */” 作为多行注释符时,从开始“/*”到 “*/”之间的所有内容都为注释。这些注释字符可用于多行文字或代码块。4.7 Transact-SQL语言中的注释【例】注释符的使用USE master -打开master数据库GO /*第一个批处理结束,第二个批处理开始,查询sys.objects表中的记录*/SELECT * F
31、ROM sys.objects -在数据库中创建的每个用户定义的架构作用域内的对象在该表objects中均对应一行。GO /*第二个批处理结束,第三个批处理开始,查询sys.tables表中的记录*/SELECT * FROM sys.tablesGO 数据定义语言DDL(Data Definition Language):实现SQL的定义功能。用来定义数据库的逻辑结构,包括基本表、视图和索引。基本的DDL包括3类:即定义、修改和删除。语句功能CREATE创建数据库或数据库对象ALTER修改数据库或数据库对象DROP删除数据库或数据库对象4.8 数据定义语言(DDL)4.9 数据操作语言(DM
32、L)数据操纵语言DML(Data Manipulation Language):实现SQL的数据操纵功能。包括数据查询和数据更新两大类操作,其中,数据查询是指对数据库中的数据进行查询、统计、分组、排序等操作;数据更新包括插入、删除的修改3种操作。语句功能SELECT从表或视图中检索数据INSERT将数据插入到表或视图中UPDATE修改表或视图中的数据DELETE从表或视图中删除数据4.10 数据控制语言(DCL)数据控制语言DCL(Data Control Language):用来向用户赋予/取消对数据对象的控制权限,通过GRANT、REVOKE和DENY进行授权、回收或拒绝访问。数据库的控制
33、是指数据库的安全性和完整性控制。SQL的数据控制包括对基本表和视图的授权,完整性规则的描述以及事务开始和结束等控制语句。语句功能GRANT授予权限REVOKE收回权限DENY禁止从其他角色中继承许可权限4.11 其他基本语句4.11.14.11.1 数据声明数据声明变量在使用中需要先声明再使用,声明变量用DECLARE语句,其语法格式如下:DECLARE 变量名称 变量的数据类型,n 说明:局部变量的第一个字符必须是所有变量在声明后均设置初值为NULL【例】变量声明例子DECLARE size INT - 声明一个名为size的INT型变量DECLARE high INT - 声明一个名为hi
34、gh的INT型变量DECLARE string VARCHAR(10) - 声明一个名为string的VARCHAR类型变量 4.11.24.11.2 数据赋值数据赋值两种为变量赋值的方式:使用SET语句直接为变量赋值和使用SELECT语句选择表中的值来为变量赋值。SET:只能赋值一个变量 格式:SET 变量名 = 变量值SELECT:可以同时赋值多个变量 格式:SELECT 变量名1 = 变量值1, 变量名2 = 变量值2, .。【例】变量赋值例子SET size = 5SELECT high = 10, string = hello-显示赋值结果SELECT size AS size, h
35、igh AS high ,string AS string4.11.3 4.11.3 数据输出数据输出数据输出格式:(1)PRINT局部变量(字符型类型)或字符串(2)SELECT局部变量 AS自定义列名【例】数据输出示例-显示赋值结果SELECT size AS size, high AS high ,string AS stringPRINT 服务器的名称: + servernameSELECT servername as 服务器的名称:PRINT 错误编号为: + convert(varchar(4),error)-因为error返回的是一个数字,所以要用convert()函数进行转换4
36、.12.1 BEGINEND语句语句可以将多条Transact-SQL语句组成的一个语句块,整个语句块可以看做一条语句。BEGINsql_statement |statement_blockEND其中,sql_statement |statement_block是任何有效的Transact-SQL语句或语句块定义的语句分组4.12 流程控制语句【例】判断两个数大小【例】判断两个数大小declare x int,y intset x=2set y=5if xyprint x大于yelseprint x小于或等于y4.12.2 IF ELSE语句语句IF 条件表达式语句体1ELSE语句体2【例】输
37、入一个坐标值,判断其在哪一个【例】输入一个坐标值,判断其在哪一个象限。象限。declare x int,y intset x=2set y=-5if x0if y0print xy位于第一象限位于第一象限elseprint xy位于第四象限位于第四象限elseif y0print xy位于第二象限位于第二象限elseprint xy位于第三象限位于第三象限【例】设定变量【例】设定变量score,根据,根据score的值判断的值判断成绩是否合格,并输出结论。成绩是否合格,并输出结论。declare score int,a nchar(10)set score=55if score=60set a
38、=N成绩合格elseset a=N成绩不合格select a1.简单简单Case语句语句Case when 条件判断表达式结果1 then when 条件判断表达式结果2 then when 条件判断表达式结果n then else end2.Case 搜索语句搜索语句Case when 条件表达式1 then when 条件表达式2 then when 条件表达式n then else end4.12.3 Case 语句语句【例】简单【例】简单Case语句语句DECLARE var1 VARCHAR(1)SET var1=bDECLARE var2 VARCHAR(10)SET var2=C
39、ASE var1WHEN b THEN 大大WHEN m THEN 中中WHEN s THEN 小小ELSE 错误错误ENDPRINT var2select 学号学号,课程号课程号,成绩成绩,Case when 成绩成绩=90 then 优秀优秀when 成绩成绩=80 then 良好良好when 成绩成绩=70 then 中等中等when 成绩成绩=60 then 及格及格when 成绩成绩60 then 不及格不及格end as 成绩等级成绩等级from 选课选课【例】【例】Case搜索语句搜索语句select 成绩成绩,等级等级=Case when 成绩成绩=60 and 成绩成绩=80
40、 and 成绩成绩=90 and 成绩成绩=0 and 成绩成绩=60 and 成绩成绩=70 and 成绩成绩=80 and 成绩成绩=90 and 成绩成绩=100 then 优秀优秀endfrom 选课选课go查看视图:查看视图:select * from v4.12.4 WHILEBREAK和和CONTINUE语句语句WHILECONTINUEBREAK语句用于设置重复执行的语句用于设置重复执行的SQL语句或语句块的条件。只要指定的条件为真,就重复执语句或语句块的条件。只要指定的条件为真,就重复执行语句。行语句。1.WHILE 语句语句DECLARE s INT,num INTSELE
41、CT s=0,num=1WHILE num=100BEGINSET s=s+numSET num=num+1ENDPRINT 1+2+3+.+100=+CONVERT(CHAR,s)DECLARE x INTSET x=1WHILE x=10BEGINPRINT xSELECT x=x+1END4.12.4 WHILEBREAK和和CONTINUE语句语句2.BREAK 语句语句 BREAK 语句一般用在语句一般用在WHILE循环或循环或IF .ELSE语句中,用于退出本语句中,用于退出本层循环。层循环。【例】求【例】求1100之间的累加和,当和超过之间的累加和,当和超过1000时停止累加,显
42、示累加和以及时停止累加,显示累加和以及累加到的位置。累加到的位置。DECLARE i INT,s INTSET i=1SET s=0WHILE i=1000BREAKSET i=i+1ENDSELECT s AS s,i AS i4.12.4 WHILEBREAK和和CONTINUE语句语句3.CONTINUE 语句语句CONTINUE 命令可以让程序跳过命令可以让程序跳过CONTINUE 命令之后的语句,回到命令之后的语句,回到WHILE循环的第一行命令。循环的第一行命令。BREAK则让程序完全跳出循环,结束则让程序完全跳出循环,结束WHILE命令的执行命令的执行。【例】求【例】求110之间
43、的偶数和,并用之间的偶数和,并用CONTINUE控制语句的输出。控制语句的输出。DECLARE x INT,sum INTSET x=1SET sum=0WHILE x10BEGINSET x=x+1IF x%2=0SET sum=sum+xELSECONTINUEPRINT 只有只有x是偶数才输出这句话是偶数才输出这句话ENDprint sum4.12.5 GOTO语句语句 无条件转移语句,使用无条件转移语句,使用GOTO语句可以将执行流程转移到标签指定语句可以将执行流程转移到标签指定的位置。由于该语句破坏了语句的结构,容易引发不易发现的问题,所的位置。由于该语句破坏了语句的结构,容易引发不
44、易发现的问题,所以应该尽量减少或避免使用。以应该尽量减少或避免使用。DECLARE x INTSET x=1lab:PRINT xSELECT x=x+1WHILE x=3GOTO lab说明:标签是说明:标签是GOTO目标,它不仅仅标识了跳转目标,标目标,它不仅仅标识了跳转目标,标签不隔离其前后语句。执行标签前面语句的用户跳过标签签不隔离其前后语句。执行标签前面语句的用户跳过标签并执行标签后的语句。除非标签前面的语句本身是控制流并执行标签后的语句。除非标签前面的语句本身是控制流语句(语句(return),这种情况才发生。),这种情况才发生。DECLARE x INTSET x=1lab:PR
45、INT xSELECT x=x+1WHILE x0PRINT 遇到遇到RETURN之前之前RETURNPRINT 遇到遇到RETURN之后之后【例】【例】USE xscjIF EXISTS(SELECT * FROM course WHERE cname=高等数学高等数学)BEGINPRINT 高等数学课程记录已存在!高等数学课程记录已存在!RETURNENDELSEINSERT INTO courseVALUES(1001,高等数学高等数学,1005,4)4.13 批处理语句4.13.1 批处理的基本概念批处理是包含一条或多条SQL语句的组,从应用程序一次性地发送到SQL Server执行S
46、QL Server 将批处理语句编译成一个可执行单元,此单元称为执行计划。执行计划中的语句每次执行一条。GO是批处理的标志,表示SQL Server将这些T-SQL语句编译为一个执行单元,提高执行效率。一般是将一些逻辑相关的业务操作语句,放置在同一批中,这完全由业务需求和代码编写者决定。4.13.2 每个批处理单独发送到服务器每个批处理都被独立地处理,所以一个批处理中的错误不会阻止另一个批处理运行。为了将脚本分成多个批处理,要使用GO语句。【例】使用GO语句创建批处理。以下语句被分为了三个批处理。USE tempdbDECLARE MyBacth varchar(50) -这里声明的变量MyB
47、acth的作用域仅仅在这个批处理中!SELECT MyBacth = 第一个批处理PRINT 第1个批处理执行完毕!GOPRINT MyBacth -这里将产生一个错误,因为MyBacth没有在这个批处理中声明。PRINT 第2个批处理执行完毕!GOPRINT 第3个批处理执行完毕! - 注意,即使第个批处理出错后,第个批处理仍将得到执行。4.13.3 何时使用批处理批处理常被用在某些事情不得不发生在其他事情前面,或者不得不和其他事情分开的脚本中。使用以下几个命令时,必须独自成批处理,包括:CREATE DEFAULTCREATE PROCEDURECREATE RULECREATE TRIG
48、GERCREATE VIEW4.13.4 使用批处理建立优先级【例】演示使用批处理建立优先级。CREATE DATABASE DBase1USE DBase1CREATE TABLE Table1(col1 int,col2 int)分析器尝试验证代码时发现分析器尝试验证代码时发现USE引用一个不存在的数据库,引用一个不存在的数据库,所以以上语句不能正确执行。这是因为缺少了批处理语句。所以以上语句不能正确执行。这是因为缺少了批处理语句。正确的代码如下:正确的代码如下:CREATE DATABASE DBase1GO -此GO使创建数据库的语句成为了一个批处理并被发送到SQL Server成功得
49、到执行USE DBase1CREATE TABLE Table1( col1 int, col2 int)【例】演示使用批处理建立优先级。演示使用批处理建立优先级,执行如下代码:USE DBase1ALTER TABLE Table1ADD col3 intINSERT INTO Table1(col1,col2,col3) VALUES(1,1,1)得到了一个错误的消息 SQL Server不能解析新的列名称,于是产生错误:消息 207,级别 16,状态 1,第 4 行列名 col3 无效。只需在ADD col3 int之后添加一个简单的GO语句,一切就会正常运行。4.13.5 创建批处理后
50、的执行 创建批处理后,可以使用sqlcmd命令来执行,一般命令格式如下: sqlcmd U sa P passwd i mysql.sql 【例】演示使用sqlcmd运行Transact-SQL脚本文件。步骤如下:1. 使用记事本创建一个简单的Transact-SQL脚本文件(1)单击“开始”菜单,选择“所有程序”|“附件”|“记事本”。(2)复制以下Transact-SQL代码并将其粘贴到“记事本”,将文件保存为sqlTest.sql,实现T-SQL脚本文件的创建。USE MASTERGOIF DB_ID(DBase1)-返回数据库标识 (ID) 号IS NOT NULLDROP DATAB