1 / 40

第8章 Transact-SQL程序设计

第8章 Transact-SQL程序设计. 8.1 Transact-SQL语言基础 8.2 批处理与程序流程控制语句 8.3 系统内置函数 8.4 用户自定义函数. 8.1 Transact-SQL语言基础. 8.1.1 标识符 8.1.2 常量 8.1.3 变量 8.1.4 运算符与表达式. 8.1.1 标识符. 1 .常规标识符 常规标识符应符合如下规则:

gustav
Download Presentation

第8章 Transact-SQL程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 Transact-SQL程序设计 • 8.1 Transact-SQL语言基础 • 8.2 批处理与程序流程控制语句 • 8.3 系统内置函数 • 8.4 用户自定义函数

  2. 8.1 Transact-SQL语言基础 • 8.1.1 标识符 • 8.1.2 常量 • 8.1.3 变量 • 8.1.4 运算符与表达式

  3. 8.1.1 标识符 • 1.常规标识符 • 常规标识符应符合如下规则: • (1)第一个字符必须是下列字符之一:ASCII字符、Unicode字符、下划线 (_)、@或#。在 SQL Server 中,某些处于标识符开始位置的符号具有特殊意义,以@开始的标识符表示局部变量或参数,以一个数字符号开始的标识符表示临时表或过程,以##开始的标识符表示全局临时对象。 • (2)后续字符可以是:ASCII字符、Unicode字符、下划线 (_)、@、美元符号 ($)或数字符号。 • (3)标识符不能是 Transact-SQL 的保留字。 • (4)不允许嵌入空格或其它特殊字符。

  4. 8.1.1 标识符 • 2.分隔标识符 • 分隔标识符包含在双引号 (") 或者方括号 ([ ]) 内。分隔标识符在下列情况下使用: • (1)当在对象名称或对象名称的组成部分中使用保留字时。 • (2)当使用未被列为合法标识符的字符时。 • 分隔标识符使用示例: • SELECT * FROM [Blanks In Table Name] • SELECT * FROM "Blanks in Table Name" • 标识符允许的最大长度为128个字符。符合常规标识符格式规则的标识符可以分隔,也可以不分隔;对不符合标识符规则的标识符必须进行分隔。

  5. 8.1.2 常量

  6. 8.1.3 变量 • 1.局部变量 • (1)局部变量的定义 • 在批处理或存储过程中用DECLARE语句声明局部变量,所有局部变量在声明后均初始化为NULL。 • 语法格式: • DECLARE {@local_variable data_type} [,…n] • (2)局部变量的赋值 • 当声明局部变量后,可用SET或SELECT语句给其赋值。 • ① 用SET语句赋值 • 语法格式: • SET @local_variable=expression • ② 用SELECT语句赋值 • 语法格式: • SELECT {@local_variable=expression} [,…n]

  7. 语法格式 • Declare 变量1数据类型(长度)… 变量n 数据类型(长度) • Set 变量1=表达式 • …… • Set 变量n=表达式 • Select 语句

  8. 例题: • 1、创建局部变量@var1赋值为“中华”;@var2赋值为“人民共和国”。显示结果为“中华人民共和国”。 • Declare @var1 char(10) , @var2 char(20) • Set @var1=‘中华’ • Set @var2=‘ 人民共和国’ • Select @var1+@var2

  9. 例题 • 2、创建一个名为xb的局部变量,显示所有男同学的学号和姓名。 • Declare @xb char(2) • Set @xb=‘男’ • Select 学号,姓名 • From xsda • Where 性别=@xb

  10. 练习: • 1、创建局部变量mz,显示所有非汉族学生的姓名和名族。 • declare @mz char(10) • set @mz='汉' • select 姓名,民族 • from xsda • where 民族!=@mz

  11. 练习 • 2、创建局部变量@cj,显示成绩为80分的学生的姓名,课程名称和成绩。 • declare @cj tinyint • set @cj=80 • select 姓名,课程名称,成绩 • from xsda join xscj join kcxx on xscj.课程编号=kcxx.课程编号 on xsda.学号=xscj.学号 • where 成绩=@cj

  12. 8.1.3 变量 • 2.全局变量

  13. 8.1.4 运算符与表达式 • 1.算术运算符 • 算术运算符:加(+)、减(-)、乘(*)、除(/)和取余(%),参与运算的数据是数值类型数据,其运算结果也是数值类型数据。 • 2.字符串连接运算符 • 字符串连接运算符(+)可以实现字符串之间的连接。参与字符串连接运算的数据只能是字符数据类型:char、varchar、nchar、nvarchar、text、ntext,其运算结果也是字符数据类型。

  14. 8.1.4 运算符与表达式 • 3.比较运算符

  15. 8.1.4 运算符与表达式 • 4.逻辑运算符

  16. 例题 • 1、查询年龄最小的学生的学号、姓名和出生日期。 • Select 学号,姓名,出生日期 • From xsda • Where 出生日期>all • ( • Select 出生日期 • From xsda • )

  17. 例题 • 2、查询成绩高于“王红”最低成绩的学生的姓名、课程名称和成绩。 • Select 姓名,课程名称,成绩 • From xsda join xscj join kcxx on xscj.课程编号=kcxx.课程编号 on xsda.学号=xscj.学号 • Where 成绩>any • ( • Select 成绩 • from xsda join xscj on xsda.学号=xscj.学号 • Where 姓名=‘王红’ • )

  18. 8.1.4 运算符与表达式 • 5.运算符的优先级

  19. 练习 • 1、select 20/5+46%3 • 2、 select ((7+3)*4-17/(4-(8-6))+99%4

  20. 8.2 批处理与程序流程控制语句 • 8.2.1 批处理 • 8.2.2 流程控制语句

  21. 8.2.1 批处理 • 批指包含一条或多条T-SQL语句的语句组,这组语句从应用程序一次性地发送到SQL SERVER服务器执行,可提高效率。批结束的标志是“GO”。 • 使用批限制: • CREATE DEFAULT、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和CREATE VIEW语句不能在批处理中与其它语句组合使用。批处理必须以 CREATE 语句开始,所有跟在CREATE后的其它语句将被解释为第一个 CREATE 语句定义的一部分。 • 不能把规则和默认值绑定到表字段或者自定义字段后,立即在同一个批处理中使用。同理对CHECK约束。 • 在同一个批中不能删除一个数据库对象又重建它。 • 在同一个批中不能改变一个表后,再立即引用其新列。 • 若批处理中第一个语句是执行某个存储过程的EXECUTE语句,则EXECUTE可省略。

  22. 8.2.2 流程控制语句 • 1.复合语句 • 包括一系列的 Transact-SQL 语句,称为语句块。 • BEGIN…END 语句 • 功能:将多个T-SQL语句组合成一个语句块。 • 语法格式: • BEGIN • sql_statement /*是任何有效的 Transact-SQL 语句 • […n] • END • 2.PRINT语句 • 功能:输出返回的结果值。 • 将用户定义的消息返回客户端。 • 语法格式: • PRINT 'any ASCII text' | @local_variable | @@FUNCTION | string_expr

  23. 8.2.2 流程控制语句 • 3.判断语句(IF…ELSE) • 功能:判断语句。首先判断条件表达式的值,如果值 为真,则执行IF语句块;如果值为假,则执行ELSE语句块。 • 语法格式: • IF boolean_expression /*条件表达式 • {sql_statement|statement_block} • /*条件表达式为真时执行T-SQL语句或语句块 • [ELSE • {sql_statement|statement_block}] • /*条件表达式为假时执行T-SQL语句或语句块

  24. 例题: • if (select avg(成绩) • from xscj join kcxx on xscj.课程编号=kcxx.课程编号 • where 课程名称='计算机文化基础')>75 • print '平均成绩大于75分' • else • print '平均成绩小于75分'

  25. 8.2.2 流程控制语句 • 4.循环语句(WHILE)、BREAK语句和CONTINUE语句 • 功能: • 只要WHILE后面指定的表达式的值为真,则重复执行BEGIN…END之间的语句块。其中,CONTINUE语句使程序跳过CONTINUE语句后面的语句,回到WHILE循环的第一行命令;BREAK语句则完全终止循环,结束WHILE语句。

  26. 8.2.2 流程控制语句 • 5.RETURN语句 • 用于从过程、批处理或语句块中无条件退出,不执行位于RETURN之后的语句。 • 语法格式: • RETURN [ integer_expression ] • 6.注释 • 注释是为SQL语句加上注释正文,以说明该代码的含义,增加代码的可读性。有两种用法,注释多行用/*……*/,注释一行用--。

  27. 8.3 系统内置函数 • 8.3.1 数学函数 • 8.3.2 字符串函数 • 8.3.3 日期和时间函数 • 8.3.4 聚合函数 • 8.3.5 系统函数

  28. 8.3.1 数学函数 • 1.ABS函数 • 语法格式: • ABS ( numeric_expression ) • 2.ROUND函数 • 语法格式: • ROUND ( numeric_expression , length ) • 3.RAND函数 • 语法格式: • RAND ( [ seed ] )

  29. 8.3.2 字符串函数 • 1.ASCII函数 • 语法格式: • ASCII ( character_expression ) • 2.CHAR函数 • 语法格式: • CHAR ( integer_expression ) • 3.LEFT函数 • 语法格式: • LEFT ( character_expression , integer_expression ) • 4.RIGHT函数 • 语法格式: • RIGHT ( character_expression , integer_expression )

  30. 8.3.2 字符串函数 • 5.SUBSTRING函数 • 语法格式: • SUBSTRING ( expression , start , length ) • 6.REPLACE函数 • 语法格式: • REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3 ' ) • 7.STR函数 • 语法格式: • STR ( float_expression [ , length [ , decimal ] ] ) • 8.LEN • 语法格式: • LEN ( string_expression )

  31. 8.3.3 日期和时间函数 • 1.GETDATE函数 • 语法格式: • GETDATE ( ) • 2.DAY函数 • 语法格式: • DAY ( date ) • 3.MONTH函数 • 语法格式: • MONTH ( date ) • 4.YEAR函数 • 语法格式: • YEAR ( date )

  32. 8.3.4 聚合函数

  33. 8.3.5 系统函数 • 1.CASE函数 • (1)简单的CASE语句 • 语法格式: • CASE input_expression • WHEN when_expression THEN result_expression • […n] • [ELSE else_result_expression] • END • (2)搜索型CASE语句 • 语法格式: • CASE • WHEN Boolean_expression THEN result_expression • […n] • [ELSE else_result_expression] • END

  34. 8.3.5 系统函数 • 2.CURRENT_USER • 语法格式: • CURRENT_USER • 3.HOST_NAME • 语法格式: • HOST_NAME ( )

  35. 8.4 用户自定义函数 • 8.4.1 用户自定义函数的定义与调用 • 8.4.2 用户自定义函数的删除

  36. 8.4.1 用户自定义函数的定义与调用 • 1.标量函数 • 标量函数返回一个确定类型的标量值,其返回值类型为除了TEXT、NTEXT、IMAGE、CURSE、TIMESTAMP和TABLE类型外的其它数据类型。函数体语句定义在BEGIN……END语句内。 • (1)标量函数的定义 • 语法格式: • CREATE FUNCTION [owner_name.]function_name /*函数名部分 • (@parameter_name scalar_parameter_data_type,…n) /*形参定义部分 • RETURNS scalar_return_data_type /*返回值类型 • AS • BEGIN • function_body /*函数体部分 • RETURN scalar_expression /*返回语句 • END

  37. 8.4.1 用户自定义函数的定义与调用 • (2)标量函数的调用 • 当调用用户自定义标量函数时,必须提供至少由两部分组成的名称(所有者名.函数名)。可在SELECT语句中调用用户定义标量函数,也可利用T-SQL的EXECUTE语句调用用户定义标量函数。 • ① 在SELECT语句中调用 • 语法格式: • 所有者名.函数名(实参1,…,实参n) • ② 利用EXECUTE语句调用 • 语法格式: • 所有者名.函数名 实参1,…,实参n • 或 • 所有者名.函数名 形参名1=实参1,…,形参名n=实参n

  38. 8.4.1 用户自定义函数的定义与调用 • 2.内嵌表值函数 • 内嵌表值函数返回可更新表,没有由BEGIN……END语句括起来的函数体。内嵌表值函数可用于实现参数化的视图。 • (1)内嵌表值函数的定义 • 语法格式: • CREATE FUNCTION [owner_name.]function_name /*函数名部分 • (@parameter_name scalar_parameter_data_type,…n) /*形参定义部分 • RETURNS TABLE /*返回值为表类型 • AS TRTURN • SELECT查询语句 • (2)内嵌表值函数的调用 • 内嵌表值函数只能通过SELECT语句调用。

  39. 8.4.1 用户自定义函数的定义与调用 • 3.使用企业管理器创建用户自定义函数

  40. 8.4.2 用户自定义函数的删除 • 1.使用企业管理器删除 • (1)展开【服务器组】、展开 【服务器】。 • (2)展开【数据库】,展开数据库,单击【用户定义函数】,在详细信息窗口中显示已有的自定义函数。 • (3)右击[要删除的用户定义函数]单击【删除】弹出【去除对象】对话框,单击【全部去除】完成。 • 2.使用T-SQL语句的DROP FUNCTION删除 • 语法格式: • DROP FUNCTION [owner_name.]function_name [,…n]

More Related