




已阅读5页,还剩141页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章Transact SQL语言 SQL StructuredQueryLanguage 结构化查询语言 是一种数据库查询和程序设计语言 用于存取数据以及查询 更新和管理关系数据库系统 Transact SQL即事务SQL 也简称为T SQL 它是微软公司对SQL语言的扩充 是SQL语言的超集 是应用程序与SQL Server数据库引擎沟通的主要语言 T SQL提供标准SQL的DDL和DML功能 加上延伸的函数 系统预存程序以及程序设计结构 例如IF和WHILE 让程序设计更有弹性 本章的学习目标 常量与变量 运算符与表达式 流程控制语句 函数的使用 8 1概述 1970年6月 IBM圣约瑟研究实验室的高级研究员埃德加 考特 EdgarFrankCodd 在CommunicationsofACM上发表了 大型共享数据库数据的关系模型 一文 首次明确而清晰地为数据库系统提出了一种崭新的模型 即关系模型 1970年以后 考特继续致力于完善与发展关系理论 1972年 他提出了关系代数和关系演算的概念 定义了关系的并 交 投影 选择 连接等各种基本运算 为SQL语言的形成和发展奠定了理论基础 1979年 SQL地在商业数据库中成功得到了应用 1986年 美国国家标准学会 ANSI 正式发表了编号为X3 135 1986的SQL标准 并且在1987年获得了ISO组织的认可 被命名为ISO9075 1987 后来这个标准在1992 1999 2001 2003 2005 2006年等不断地得到了扩充和完善 T SQL是SQLServer2008提供的查询语言 使用T SQL编写应用程序可以完成所有的数据库管理工作 任何应用程序 只要目的是向SQLServer2008的数据库管理系统发出命令以获得数据库管理系统的响应 最终都必须体现为以T SQL语句为表现形式的指令 对用户来说 T SQL是惟一可以和SQLServer2008的数据库管理系统进行交互的语言 8 1 1T SQL语言的特点 尽管SQLServer2008提供了使用方便的图形化用户界面 但各种功能的实现基础是T SQL语言 只有T SQL语言可以直接和数据库引擎进行交互 T SQL语言是基于商业应用的结构化查询语言 是标准SQL语言的增强版本 由于T SQL语言直接来源于SQL语言 因此它也具有SQL语言的几个特点 一体化 T SQL语言集数据定义语言 数据操纵语言 数据控制语言和附加语言元素为一体 其中附加语言元素不是标准SQL语言的内容 但是它增强了用户对数据库操作的灵活性和简便性 从而增强了程序的功能 两种使用方式 统一的语法结构 两种使用方式 即联机交互式和嵌入高级语言的使用方式 统一的语法结构使T SQL语言可用于所有用户的数据库活动模型 包括系统管理员 数据库管理员 应用程序员 决策支持系统管理人员以及许多其他类型的终端用户 高度非过程化 T SQL语言一次处理一个记录 对数据提供自动导航 允许用户在高层的数据结构上工作 可操作记录集 而不是对单个记录进行操作 所有的SQL语句接受集合作为输入 返回集合作为输出 并允许一条SQL语句的结果作为另一条SQL语句的输入 另外 Transact SQL语言不要求用户指定对数据的存放方法 所有的Transact SQL语句使用查询优化器 用以指定数据以最快速度存取的手段 类似人的思维方式 容易理解和掌握 SQL语言的易学易用性 而T SQL语言是对SQL语言的扩展 因此也是非常容易理解和掌握的 如果对SQL语言比较了解 在学习和掌握T SQL语言及其高级特性时就更游刃有余了 8 1 2T SQL中的语法约定 T SQL与传统SQL稍有不同 SQL是结构化查询语言 是目前关系型数据库管理系统中使用最广泛的查询语言 T SQL是在SQL上发展而来的 T SQL在SQL的基础上添加了流程控制 是SQL语言的扩展 SQL是几乎所有关系型数据库都支持的语言 而T SQL是MicrosoftSQLServer支持的语言 任何一种语言都会有其语法约定 T SQL也不例外 下面简单介绍T SQL的语法约定 表8 1列出了Transact SQL参考的语法关系图中使用的约定 并进行了说明 Transact SQL中 所有的数据库对象的名称采用多部分名称格式表示 除非另外指定 否则 所有对数据库对象名的Transact SQL引用将是由四部分组成的名称 格式如下 server name database name schema name object name database name schema name object name schema name object name object name server name 指定链接的服务器名称或远程服务器名称 database name 如果对象驻留在SQLServer的本地实例中 则指定SQLServer数据库的名称 如果对象在链接服务器中 则database name将指定OLEDB目录 表8 1Transact SQL参考的语法关系图中使用的约定 schema name 如果对象在SQLServer数据库中 则指定包含对象的架构的名称 如果对象在链接服务器中 则schema name将指定OLEDB架构名称 object name 对象的名称 引用某个特定对象时 不必总是指定服务器 数据库和架构供SQLServer数据库引擎标识该对象 但是 如果找不到该对象 将返回错误 注意 为了避免名称解析错误 建议只要指定了架构范围内的对象时就指定架构名称 若要省略中间节点 请使用句点来指示这些位置 表8 2显示了对象名的有效格式 除非专门说明 否则 本书的Transact SQL语句都已使用SQLServerManagementStudio及其以下选项的默认设置进行测试 表8 2对象名的有效格式 ANSI NULLS ANSI NULL DFLT ON ANSI PADDING ANSI WARNINGS CONCAT NULL YIELDS NULL QUOTED IDENTIFIER 本书的Transact SQL语句都已在运行区分大小写排序顺序的服务器上进行了测试 测试服务器通常运行ANSI ISO1252代码页 许多代码中用字母N作为Unicode字符串常量的前缀 如果没有N前缀 则字符串被转换为数据库的默认代码页 此默认代码页可能不识别某些字符 8 1 3T SQL语言要素 T SQL通常用于数据库管理任务 如创建 删除表和列 也可以用于编写触发器和存储过程 或修改SQLServer的配置 或与SQLServer的GraphicalQueryAnalyzer交互使用来执行查询语句 T SQL对使用SQLServer非常重要 与SQLServer通讯的所有应用程序都通过向服务器发送T SQL语句来进行通讯 而与应用程序的用户界面无关 执行T SQL语句的最主要的工具是 SQL查询分析器 所有T SQL语句都可以在该工具中执行 如图8 1所示 在SQLServer数据库中 T SQL语言由以下几部分组成 1 数据定义语言DDL DataDefinitionLanguage DDL语言用于执行数据定义任务 对数据库以及数据库中的各种对象 如数据表 存储过程 函数或自定义类型等 进行创建 删除 修改等操作 DDL语言包含的主要语句及功能如表8 3所示 图8 1SQL查询分析器 表8 3DDL的主要语句及功能 2 数据操纵语言DML DataManipulationLanguage DML是一般开发人员简称的CRUD Create Retrieve Update Delete 功能 意指数据的新增 提取 修改 删除四个数据操纵功能 SELECT R INSERT C UPDATE U DELETE D DML语言包含的主要语句及功能如表8 4所示 表8 4DML的主要语句及功能 3 数据控制语言DCL DataControlLanguage DCL语言用于安全管理 确定哪些用户可以查看或修改数据库中的数据 DCL语言包含的主要语句及功能如表8 5所示 表8 5DCL的主要语句及功能 4 程序中的批处理 脚本 注释 有些任务不能由单独的T SQL语句来完成 就需要使用SQLServer的批处理 脚本 存储过程 触发器等组织多条T SQL语句来完成 下面重点介绍批处理 脚本等基本概念 1 批处理 在SQLServer2008中 可以一次执行多个T SQL语句 这样多个T SQL语句称为 批 SQLServer2008会将一批T SQL语句当成一个执行单元 将其编译后一次执行 而不是将一个个T SQL语句编译后再一个个执行 SQLServer中使用GO语句作为批处理的结束标记 即SQLServer把两个GO语句之间的一条或多条语句当作一个批处理 当编译器读取到GO语句时 它会把GO语句前的所有语句当作一个批处理 并将这些语句打包发送给服务器 例如 SELECT FROMstu info dbo course WHEREcname 数据结构 UPDATEstu info dbo course SETcp id 1WHEREcname 日语 GO SELECT FROMstu info dbo course GO GO语句本身不是T SQL语句的组成部分 它只是一个用于表示批处理结束的指令 如果在一个批处理中包含语法错误 如引用了一个不存在的对象等 则整个批处理就不能被成功地编译和执行 如果一个批处理中某条语句执行错误 如违反了约束 则它仅影响该语句的执行 而并不影响批处理中其它语句的执行 2 脚本 脚本是以文件存储的一系列T SQL语句 即一系列按顺序提交的批处理 T SQL脚本中可以包含一个或多个批处理 查询分析器是建立 编辑和执行脚本的一个最好的环境 在查询分析器中 不仅可以新建 保存 打开脚本文件 而且可以输入和修改T SQL语句 还可以通过执行T SQL语句来查看脚本的运行结果 从而检验脚本内容是否正确 3 注释 在T SQL程序里加入注释语句 可以增加程序的可读性 SQLServer不会对注释的内容进行编译和执行 在T SQL中支持两种形式的注释语句 双连字符 这些注释字符可与要执行的代码处在同一行 也可另起一行 从双连字符开始到行尾均为注释 对于多行注释 必须在每个注释行的开始使用双连字符 例 查看所有女同学的信息 SELECT FROMstu info dbo student WHEREssex 女 GO 更新记录内容 UPDATEstu info dbo student SETsdepartment 信息工程学院 WHEREsname 严如玉 GO 正斜杠 星号对 这些注释字符可与要执行的代码处在同一行 也可另起一行 甚至在可执行代码内 从开始注释对 到结束注释对 之间的全部内容均视为注释部分 对于多行注释 必须使用开始注释字符对 开始注释 使用结束注释字符对 结束注释 注释行上不应出现其它注释字符 例 下面代码可以完成以下操作 1 查看student表中所有女生的记录内容 2 将student表中姓名为 严如玉 的系别字段内容改为 信息工程学院 3 查看修改后的结果 SELECT FROMstu info dbo student WHEREssex 女 GO UPDATEstu info dbo student SETsdepartment 信息工程学院 WHEREsname 严如玉 GO SELECT FROMstu info dbo student GO 注意 整个注释必须包含在一个批处理中 多行注释不能跨越批处理 8 2常量与变量 8 2 1常量 常量也称文字值或标量值 使一个代表特定值的符号 是一个不变的值 常量的格式取决于它所表示的值的数据类型 数据类型不同 常量也会有不同的表达方式 SQLServer中常量包括字符串常量 整型常量 实型常量 日期时间型常量 货币型常量等 1 常量的类型 1 字符串常量 字符串常量是定义在单引号内的一串字符 如果字符串内容本身含有单引号 可以用连续两个单引号来表示 例如 abc 123 I mback 当字符串中有单引号时 则用两个单引号来表示 空字符串 2 Unicode常量 Unicode常量的表示方法与字符串常量的表示方法相同 只是Unicode常量必须有一个大写的N来区别字符串常量 例如 N abc N 123 N I mback N 3 二进制常量 二进制常量必须是以0 x开头的十六进制数字字符串 这些常量可以不用引号括起来 例如 0 xAE 0 x12384 0 x12AF 4 bit常量 bit常量只能使用数据0或1表示 并且不能放在引号中 如果使用一个大于1的数字来定义bit常量 那么这个数据会被强制转换成1 虽然在SQLServerManagementStudio中打开数据表看到的bit类型的字段内容为TRUE或FALSE 但是在T SQL中使用bit常量时 还是用1或0来表示TRUE或FALSE 5 日期时间型常量 日期时间常量是用单引号括起来的日期或时间字符的字符串 只要输入的日期能明显分辨出年月日 不论用哪种年月日的表达式都可以视为正确的输入 例如 August3 2009 2009 5 12 090406 09 04 06 06 35PM 4 6 096 35 52PM 6 整型常量 整型常量是没有用引号括起来的 不包括小数点的数字 例如 1234 67 95 12 7 decimal常量 decimal常量是没有用括号括起来的 包含小数点的数字 例如 1234 5678 67 0 214 12 45 2 8 float和real常量 float和real常量是用科学记数法来表示数字 例如 123 4E5 0 12E 2 12 34E2 0 56E 2 9 货币型常量 货币型常量是以货币符号 例如 开头的数值 例如 12 123 45 12 3 34 5 2 在T SQL中使用常量 在T SQL中 可以用多种方式来使用常量 1 作为表达式中的常量 例如 SELECTsnameas姓名 系别 sdepartmentFROMstu info dbo student 2 在WHERE子句中 作为比较字段的数据值 SELECT FROMstu info dbo courseWHEREchours 72 3 为变量赋值 DECLARE abcint SET abc 123 4 在UPDATE的SET子句或者INSERT的VALUES子句里指定字段的数据值 UPDATEstu info dbo courseSETchours 108WHEREcname N 大学英语 INSERTstu info dbo course c id cname VALUES 17 N Java程序设计 5 在PRINT或RAISERROR语句里指定输出的消息文本 PRINT 操作已经全部完成 6 作为条件语句 例如IF语句和CASE函数 中要判断的值 例如 IF abc 0 PRINTN 变量abc大于 8 2 2变量 变量用于临时存放数据 变量中的数据随着程序的运行而变化 是SQLServer用来在语句之间传递数据的方式之一 T SQL中的变量可以分为局部变量和全局变量两种 局部变量是以 开头命名的变量 全局变量是以 开头命名的变量 1 局部变量 局部变量是由用户自定义的变量 这些变量可以用来存储数值型 字符串型等数据 也可以存储函数或存储过程返回的值 使用Declare语句可以声明局部变量 其语法代码如下 DECLARE local variable AS data type n 其中的参数说明如下 local variable 局部变量名称 data type 局部变量的数据类型 但不能是text ntext或image类型 用Set语句和Select语句可以为变量赋值 其语法代码如下 SET local variable value SELECT local variable value 用Select语句和Print语句可以显示变量内容 其语法代码如下 SELECT local variable PEINT local variable 例如 定义局部变量并对其赋值 然后显示其内容 代码如下 DECLARE namevarchar 20 DECLARE ageint sexbit SET name 张三 SET age 20 SELECT sex 1 SELECT name SELECT age SELECT sex PRINT name PRINT age PRINT sex 注意 局部变量的有效范围为当前批处理中 也就是从Declare开始 到GO结束 如果没有GO语句 则有效范围可以扩展到所有代码结束 2 全局变量 全局变量是由系统提供的 用于存储一些系统信息 只可以使用全局变量 不可以自定义全局变量 例如 查看Select后的记录集里的记录数 并查看SQLServer2008自启动以来的连接数 其代码如下 SELECT FROMstu info dbo student PRINT 一共查询了 CAST ROWCOUNTASvarchar 5 条记录 SELECT SQLSERVER2008启动以来尝试的连接数 CAST CONNECTIONSASvarchar 10 其运行结果如图8 2所示 ROWCOUNT记录了上次运行T SQL所影响的记录数 CONNECTIONS记录的是SQLServer自上次启动以来尝试的连接数 无论连接时成功还是失败 图8 2SQL全局变量查询结果 T SQL中提供的全局变量比较多 表8 6列出了一些常用的全局变量 表8 6T SQL常用全局变量 8 3运算符与表达式 表达式 Expression 就是将同类型的数据 如常量 变量 函数等 用运算符号按一定的规则连接起来的 有意义的式子 运算符是一种用来指定要在一个或多个表达式中执行某种操作的符号 例如 表示两个表达式进行相加操作 表示两个表达式进行相乘操作 T SQL所使用的运算符可以分为算术运算符 赋值运算符 位运算符 比较运算符 逻辑运算符 字符串串联运算符和一元运算符7种 8 3 1运算符 1 算术运算符 算术运算符是对两个表达式执行数学运算 这两个表达式可以是精确数字型或近似数字型 表8 7列出了所有算术运算符 其中 和 运算符也可以用datatime和smalldatetime值进行算术运算 表8 7算术运算符 2 赋值运算符 T SQL中只有一个赋值运算符 等号 赋值运算符的作用是给变量赋值 也可以使用赋值运算符在列标题和定义列值的表达式之间建立关系 3 位运算符 位运算符用于在两个表达式之间按位进行逻辑运算 这两个表达式可以是整数或二进制数据类型 例如表8 8 表8 8位运算符 4 比较运算符 比较运算符用来比较两个表达式之间的差别 比较运算符有 相等 大于 大于等于 不等于 不等于 不大于 比如 下面语句选出总学时大于72的课程 SELECT FROMstu info dbo courseWHEREchours 72 5 逻辑运算符 逻辑运算符用来对某个条件进行测试 运算结果为TRUE或FALSE 表8 9列出了所有的逻辑运算符 表8 9逻辑运算符 6 字符串串联运算符 通过运算符 实现两个字符串的连接运算 比如 下面的字符串用 实现连接 xy 26 表达式的结果为 xy26 7 一元运算符 一元运算符只能对一个表达式进行操作 一元运算符有 数值为正 数值为负 返回数字的非 也就是补码 8 3 2运算符的优先级 当一个复杂的表达式里有多个运算符时 运算符的优先级将决定运算的先后次序 例如 1 2 3 是先算乘法后算加法 而不是先算加法后算乘法 如果希望某部分能够优先运算 可以用括号括起来 在有多层括号存在时 内层的运算优先 在T SQL中运算符的处理顺序如下所示 如果相同层次的运算出现在一起时则处理顺序为从左到右 位运算符 算术运算符 算术运算符 位运算符 位运算符 位运算符 逻辑运算符NOT 逻辑运算符AND 逻辑运算符OR 8 4流程控制语句 T SQL在SQL的基础上添加了流程控制 在T SQL中可以使用If或While等流程控制语句来对条件进行判断 再依照判断的结果决定下一步的操作是什么 T SQL中的流程控制语句包括If While Case Goto Waitfor和Return等几种 8 4 1Begin End语句 在条件和循环等流程控制语句中 要执行两个或两个以上的T SQL语句时就需要用到语句块 由BEGIN END语句将多条T SQL语句封装起来 就构成一个语句块 BEGIN END语句块允许嵌套 BEGIN END语句的语法格式为 BEGIN SQL语句 语句块 END 例如 判断学号为2010190006的学生的年龄是否大于20岁 DECLARE ageint SELECT age DATEDIFF YEAR sbirthday GETDATE FROMstu info dbo student WHEREs id 2010190006 IF age 20 BEGIN PRINT 班里学号为2010190006的学生年龄大于20岁 PRINT 学号为2010190006的学生年龄为 PRINT age END 8 4 2If Else语句 在程序中如果要对给定的条件时行判定 当条件为真或假时分别执行不同的T SQL语句 可用IF ELSE语句实现 IF ELSE语句的语法格式如下 IF条件表达式 SQL语句或语句块1 ELSE SQL语句或语句块2 其中条件表达式可以是各种表达式的组合 但表达式的值必须是逻辑值 真 或 假 IF ELSE用来判断当条件表达式成立时执行某段程序 SQL语句或语句块1 条件不成立时执行另一段程序 SQL语句或语句块2 或不执行 当无ELSE选项时 例如 判断价格是否大于190 DECLARE priceint SET price 170 IF price 190 PRINT 价格大于或等于190 ELSE PRINT 价格小于190 GO 语句执行结果如图8 3所示 图8 3IF ELSE语句执行结果 注意 可在IF区或ELSE区嵌套另一个IF语句 T SQL中最多可嵌套32层 8 4 3While Break和Continue语句 在程序中如果需要重复执行其中的一部分语句 可使用WHILE循环语句来实现 WHILE语句根据所指定的条件重复执行语句或语句块 只要指定的条件为真 就重复执行语句 可以使用BREAK和CONTINUE在循环内部控制WHILE循环中语句的执行 BREAK语句使程序从循环中跳出 而CONTINUE语句使程序跳过循环体内CONTINUE后面的SQL语句 立即进行下次条件测试 1 WHILE语句的语法格式如下 WHILE条件表达式 BEGIN SQL语句或语句块1 BREAK SQL语句或语句块2 CONTINUE SQL语句或语句块3 END 例如 打印输出12345 用WHILE语句实现 程序清单如下 DECLARE xint SELECT x 1 WHILE x 6 BEGIN PRINT x SELECT x x 1 END 运行结果如图8 3所示 图8 4While语句执行结果 2 BREAK语句 一般用在循环语句中 用于退出本层循环 当程序中有多层循环嵌套时 使用BREAK语句只能退出其所在的这一层循环 3 CONTINUE语句 一般用在循环语句中 结束本次循环 重新转到下一次循环条件的判断 8 4 4Case语句 Case语句也是条件判断语句的一种 可以完成比If语句更强的判断 在If语句中 如果需要判断的条件很多 将会用到大量的If嵌套 这样代码看起来就越乱 越复杂 可读性就越差 使用Case语句可以轻松解决该问题 Case语句的语法代码有两种格式 一种是简单的Case代码 用于将某个表达式与一组简单的表达式进行比较以确定结果 另一种是搜索的Case代码 用于计算一组布尔表达式以确定结果 其语法代码如下 简单的Case语法代码 CASEinput expression WHENwhen expressionTHENresult expression n ELSEelse result expression END 搜索的Case语法代码 CASE WHENBoolean expressionTHENresult expression n ELSEelse result expression END 在简单的Case语法代码中 系统会将input expression的值与每一个When expression的值进行比较 如果相同的话 返回Then语句之后的表达式 如果都不同相等的话 返回ELSE语句之后的表达式 例如 DECLARE courcenamevarchar 10 outstrvarchar 100 SELECT courcename cnamefromstu info dbo course WHEREc id 15 SET outstr CASE courcename WHEN 数据结构 THEN 课程 数据结构 WHEN 离散数学 THEN 课程 WHEN 数据库 THEN 课程 数据库 WHEN 操作系统 THEN 课程 操作系统 WHEN 人工智能 THEN 课程 人工智能 ELSE 其他课程 END PRINT outstr 从以上代码可以看出 简单的Case语句在条件成立时会返回一个表达式的值 而不是去执行T SQL语句 此时Case语句更像一个函数 搜索的Case语句可以用于多条件的判断 用于多条件判断时 在Case关键字后不带任何表达式 而When之后必须为一个逻辑表达式 当表达式为真是返回Then之后的值 例如 DECLARE courcenamevarchar 10 outstrvarchar 100 SELECT courcename cnamefromstu info dbo course WHEREc id 15 SET outstr CASE WHEN courcename 数据结构 THEN 课程 数据结构 WHEN courcename 离散数学 THEN 课程 WHEN courcename 数据库 THEN 课程 数据库 WHEN courcename 操作系统 THEN 课程 操作系统 WHEN courcename 人工智能 THEN 课程 人工智能 ELSE 其他课程 END PRINT outstr 8 4 5Goto语句 GOTO语句将执行流程无条件地转移到指定的标签处 跳过GOTO之后的语句 在标签处继续处理 GOTO语句和标签可在过程 批处理或语句块中的任何位置使用 GOTO语句可嵌套使用 语法格式如下 定义标签 label 改变执行 GOTOlabel Label 若有GOTO语句指向此标签 则其为处理的起点 标签必须符合标识符规则 标签还可作为注释方法使用 GOTO可用在条件控制流语句 语句块或过程中 但不可跳转到批处理之外的标签处 GOTO分支可跳转到定义在GOTO之前或之后的标签处 将执行流程转移到标号指定的位置 例如 下面的语句打印输出12345 程序清单如下 DECLARE xint SELECT x 1 label 1 PRINT x SELECT x x 1 IF x 6 GOTOlabel 1 8 4 6Waitfor语句 WAITFOR语句用于延迟后续的代码执行 或等到指定的时间后再执行后续的代码 其语法格式如下 WAITFOR DELAY time to pass TIME time to execute 说明 1 DELAY time to pass 用于指定必须等待的时间 最长可达24小时 time to pass 可以用datetime数据格式指定 用单引号括起来 但在值中不允许有日期部分 也可以用局部变量指定参数 2 TIME time to execute 指定等待到某一时刻 time to execute 值的指定同上 例如 使用Waitefor语句先执行一个查询语句 然后等待10秒再执行一个查询语句 其代码如下 SELECTcnameAS课程名FROMstu info dbo courseWHEREc id 12 GO WAITFORDELAY 00 00 10 SELECTcnameAS课程名FROMstu info dbo courseWHEREc id 12 GO 再例如 先执行一个查询语句 然后在指定的时间再执行另一个查询语句 其代码如下 SELECTcnameAS课程名FROMstu info dbo courseWHEREc id 12 GO WAITFORTIME 17 10 20 SELECTcnameAS课程名FROMstu info dbo courseWHEREc id 12 GO 8 4 7Ruturn语句 Return语句会终止当前T SQL语句的执行 从查询或过程中无条件的退出来 并且可以返回一个整数值给调用该代码的程序 与Break和Goto语句不同 Return可以在任何时候从过程 批处理或语句块中退出 而不是跳出某个循环或跳到某个位置 Return一般用于存储过程或自定义的函数中 其语法格式如下 RETURN integer expression 8 4 8Try Catch语句 Try Catch语句类似C 或C 语句中的异常处理 当执行Try语句块中的代码出现错误时 系统将会把控制传递给Catch语句块去处理 其语法代码为 BEGINTRY sql statement statement block ENDTRY BEGINCATCH sql statement statement block ENDCATCH 8 4 9Execute语句 Excute语句可以用来执行存储过程 用户自定义函数或批处理中的命令字符串 在SQLServer2008中 Execute语句还可以像链接服务器发送传递命令 严格来说 Execute语句不属于T SQL流程控制语句 但它在T SQL程序中使用的频率很高 Execute运行存储过程或函数的语法代码如下 EXEC EXECUTE return status module name number module name var parameter value variable OUTPUT DEFAULT n WITHRECOMPILE 8 5函数 SQLServer2008为T SQL提供了很多函数 每个函数都能实现不同的功能 例如Count函数和Sum函数等 SQLServer2008将函数分为聚合函数 配置函数 游标函数 日期和时间函数 数学函数 元数据函数 行集函数 安全函数 字符串函数 系统统计函数 文本和图像函数以及其他函数12类 下面介绍一些常用的函数 8 5 1聚合函数 聚合函数可以将多个值合并为一个值 其作用是对一组值进行计算 并返回计算后的值 常与Select语句的Groupby子句一起使用 除了Count之外 其他聚合函数都会忽略NULL 常用的聚合函数如表8 10所示 表8 10常用的聚合函数 例如 求出课程的平均学时数 SELECTAVG chours AS平均学时数FROMstu info dbo course 执行结果如图8 5所示 图8 5聚合函数语句执行结果 8 5 2日期和时间函数 日期和时间函数可以用来更改日期和时间的值 起作用是对日期和时间型的数据进行处理 并返回一个字符串 数字或者日期和时间的值 常用的日期和时间函数如表8 11所示 表8 11常用的日期和时间函数 例如 从GETDATE函数返回的日期中提取月份数 SELECTDATEPART month GETDATE AS MonthNumber 执行结果为 MonthNumber 8 8 5 3数学函数 数学函数实现各种数学运算 如三角运算 指数运算 对数运算等 SQLServer所提供的常用数学函数如表8 12所示 表8 12常用的数学函数 例如 比较CEILING FLOOR 和ROUND 函数 selectceiling 13 4 floor 13 4 round 13 4567 3 运行结果为 无列名无列名无列名 141313 4570 8 5 4字符串函数 字符串函数实现字符串的转换 查找等操作 SQLServer中提供的常用字符串函数如表8 13所示 表8 13字符串函数 例如 如下语句返回学生表中的姓氏 SELECTDISTINCTSUBSTRING sname 1 1 AS学生姓氏 FROMstu info dbo student 运行结果如图8 6所示 图8 6字符串函数语句执行结果 8 5 5用户自定义函数 除了使用系统提供的函数外 用户还可以根据需要自定义函数 根据用户自定义函数返回值的类型 可将用户定义函数分为以下三个类别 返回值为标量值的函数 用户定义函数返回值为标量值 这样的函数称为标量函数 返回值为可更新表的函数 若用户定义函数包含单个SELECT语句且该语句可更新 则该函数返回的表也可更新 这样的函数称为内嵌表值函数 返回值为不可更新数据表的函数 若用户定义函数包含多个SELECT语句 则该函数返回的表不可更新 这样的函数称为多语句表值函数 下面分别介绍这三类用户定义函数 1 标量函数 定义标量函数的语法格式 CREATEFUNCTION 所有者名 函数名 参数1 AS 类型1 默认值 参数n AS 类型n 默认值 RETURNS返回值类型 AS BEGIN 函数体 RETURN标量表达式 END 例如 计算某门课程学生的平均成绩 程序清单如下 CREATEFUNCTIONaveragecourse cnumaschar 20 RETURNSint AS BEGIN DECLARE averint SELECT aver SELECTAVG grade FROMs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 领导力发展与团队管理训练
- 石油化工产品生产技术规程
- 地产活动危机处理预案
- 人力资源管理的技术应用
- 考研政治重要知识点复习
- 环境污染治理规定
- 水利工程农田水利设施管理细则
- 品质控制主管的工作职责和要求
- 服装设计构思指南
- 创新的设计报告
- 公路养护技术管理与实施细则
- 2025-2026学年北师大版数学小学三年级上册(全册)教案设计及教学计划
- 【桂美版】六年级美术上册-六年级(桂教版)上册美术教案(详案)全
- GB/T 17238-2022鲜、冻分割牛肉
- 第四章集装箱箱务管理
- 高尔夫人群消费及行为习惯调研报告-课件
- 天气预报的发展历程课件
- 2022年国家公务员考试申论真题及答案(地市级)
- 西方法律思想史教案课件
- 电镀基础知识介绍-课件
- 公路工程项目管理(第三版)全套课件
评论
0/150
提交评论