情景7Transact–SQL程序设计.ppt
《情景7Transact–SQL程序设计.ppt》由会员分享,可在线阅读,更多相关《情景7Transact–SQL程序设计.ppt(74页珍藏版)》请在三一办公上搜索。
1、情景7 TransactSQL程序设计,SQL Server数据库技术及应用,目录,任务1 掌握Transact-SQL程序设计基础知识 任务2 掌握流程控制语句 任务3 掌握游标的使用,任务1 Transact-SQL程序设计基础知识,在SQL Server数据库应用中,经常会出现一些比较复杂的业务数据处理,比如进行复杂的数据查询和统计工作等,需要编写一些SQL程序来完成这些复杂的工作。SQL程序是面向过程的语言与SQL的结合,可以进行复杂的数据处理。此外,为了减少数据库服务器与数据库应用程序之间传输的数据量,也需要设计开发一些SQL程序。,7.1 批处理、块定义语句及注释、输出语句,7.1
2、.1 批处理定义批处理是同时从应用程序发送到 SQL Server 并得以执行的一组单条或多条 SQL 语句。SQL Server 将批处理的语句编译为单个可执行单元,称为执行计划。执行计划中的语句每次执行一条。批处理的种类较多,例如存储过程、触发器、函数内的所有语句都可构成批处理,7.1.1 批处理定义,1使用批处理的优点 减少数据库服务器有客户端之间的数据传输次数,消除过多的网络流量。减少数据库服务器有客户端之间传输的数据量。缩短完成逻辑任务所需的时间,提高代码的可复用度。,7.1.1 批处理定义,2批处理的执行 批处理以 GO 命令作为结束信号,当前批处理语句由上一 GO 命令后输入的所
3、有语句组成,如果是第一条 GO 命令,则由即席会话或脚本开始后输入的所有语句组成。注意:GO 命令和 SQL 语句不能在同一行中,但在 GO 命令行中可包含注释。,7.1.1 批处理定义,批处理在执行过程中发生运行错误:(1)大多数运行时错误将停止执行批处理中当前语句和它之后的语句。(2)某些运行时错误(如违反约束)仅停止执行当前语句。而继续执行批处理中其他所有语句。,在遇到运行时错误的语句之前执行的语句不受影响。唯一例外的情况是批处理位于事务中并且错误导致事务回滚。在这种情况下,所有在运行时错误之前执行的未提交数据修改都将回滚。,7.1.1 批处理定义,【例7-1】不能建立执行计划的批处理。
4、批处理中存在语法错误,不能建立执行计划,其中 master 是 SQL Server 自带的数据库。use master CREATE TABLE TestBatch(a int);INSERT INTO TestBatch VALUES(1);INSERT INTO TestBatch VALUES(2);INSERT INTO TestBatch VALUUS(3);/*语法错误,VALUES 拼写错误*/SELECT*FROM TestBatch;GO,7.1.1 批处理定义,【例7-2】批处理执行过程中发生的运行时错误。下面的示例没有语法错误,可以建立执行计划。在执行过程中,由于第 3
5、 个 INSERT 语句产生主键重复的错误,因此该语句停止执行,继续执行第 4 个 INSERT 语句。SELECT 语句返回三个行,如图7-1所示。,图7-1,7.1.1 批处理定义,3编写批处理的规则不能在同一个批处理中更改表,然后引用新列。不能在定义一个 CHECK 约束后,立即在同一个批处理中使用该约束。CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和 CREATE VIEW 语句,在一个批处理中只能提交一个。批处理必须以 CREATE 语句开始。所有跟在该批处理后的其他语句将被解释
6、为第一个 CREATE 语句定义的一部分。如果 EXECUTE 语句(执行存储过程的语句)是批处理中的第一句,则不需要 EXECUTE 关键字。如果 EXECUTE 语句不是批处理中的第一条语句,则需要 EXECUTE 关键字。,7.1.2 块定义,在 BEGINEND 关键字之间封装一系列的 SQL 语句,就形成了一个语句块,从而可以执行一组 SQL 语句。BEGINEND 语句块允许嵌套。BEGINEND 的语法结构如下:BEGIN SQL 语句1 SQL 语句2 END,7.1.2 块定义,【例7-3】块语句定义。下面的示例中如果没有包括 BEGINEND 块,IF 语句在条件为“真”时
7、仅执行 ROLLBACK TRANSACTION 语句,而 PRINT 语句不会被执行,不会返回打印信息。运行结果如图7-2所示。,图7-2,7.1.3 注释、输出语句,1注释注释是程序代码中不执行的文本字符串。注释可用于对代码进行解释说明或暂时禁用正在进行诊断的部分 SQL 语句。SQL Server 支持两种类型的注释字符:(1)-(双连字符)。这些注释字符可与要执行的代码处在同一行,也可另起一行。(2)/*.*/(正斜杠-星号字符对)。这些注释字符可与要执行的代码处在同一行,也可另起一行,甚至可以在可执行代码内部。,【例7-4】注释字符的使用。-Choose the AdventureW
8、orks database.USE AdventureWorks;GO-Choose all columns and all rows from the Address table.SELECT*FROM Person.AddressORDER BY PostalCode ASC;/*We do not have to specify ASC because that is the default.*/GO,7.1.3 注释、输出语句,2输出语句PRINT 语句用于将消息返回到应用程序,采用字符或 Unicode 字符串表达式作为参数,并将字符串作为消息返回到应用程序。PRINT 语句接受任何
9、字符串表达式,包括字符或 Unicode 类型的常量和局部变量名,或返回字符或 Unicode 字符串的函数,或由两个或多个常量、局部变量或函数串联生成的复杂字符串。【例7-3】中使用了 PRINT 语句实现打印文本字符串信息。,7.1.3 注释、输出语句,7.2 Transact-SQL语言的变量,变量是指在程序运行过程中,其值可以发生变化的量,通常用来保存程序运行过程中的输入数据、计算获得的中间结果和最终结果。变量有名字和数据类型两个属性。变量名用于标识该变量,以便被引用,变量的数据类型(请参考情景4)确定了该变量存放数据的格式以及允许的运算。,7.2 Transact-SQL语言的变量,
10、1变量变量名必须是一个合法的标识符(有效的字符序列)。(1)标识符。在 SQL Server 中标识符分为以下两类。常规标识符。以 ASCII 字母、Unicode 字母、下划线(_)、at 符号()或数字符号(#)开头,后续可跟一个或若干个 ASCII 字符、Unicode 字符、at 符号、美元符号($)、数字符号或下划线。分隔标识符。包含在双引号()或者方括号()内的常规标识符或不符合常规标识符规则的标识符。,(2)变量的分类。SQL Server 中变量可以分为以下两类。全局变量。全局变量由系统提供且预先声明,通过在名称前加两个at 符号()区别于局部变量。局部变量。局部变量用于保存单
11、个特定类型的数据值。当首字母为“”时,表示该标识符为局部变量名;当首字母为“#”时,表示该为一个临时数据库对象名,若开头含一个“#”,表示局部临时数据库对象名,若开头含两个“#”,表示全局临时数据库对象名。,7.2 Transact-SQL语言的变量,2局部变量的使用(1)局部变量的定义。在批处理或程序中用 DECLARE 语句声明局部变量,声明后其值设置为 NULL。语法格式:DECLARE local_variable AS data_type,.n,7.2 Transact-SQL语言的变量,参数说明:local_variable:局部变量名,应为合法常规标识符。前面的“”表示局部变量。
12、data_type:数据类型,用于定义局部变量的类型,可为系统类型或自定义类型。n:表示可以定义多个变量,各变量之间用“,”号分开。,7.2 Transact-SQL语言的变量,(2)局部变量的赋值。用 SET 语句赋值。将先前使用 DECLARE local_variable 语句创建的指定局部变量设置为指定值。在初始化多个变量时,为每个局部变量使用单独的 SET 语句。语法格式:SET local_variable=expression 参数说明:local_variable:除 cursor、text、ntext、image 或 table 以外的任何类型变量的名称。变量名称必须以 at
13、 符号()开头。变量名称必须符合标识符规则。expression:任何有效的 SQL Server 表达式。,7.2 Transact-SQL语言的变量,【例7-5】创建 myvar 变量,将字符串值放入变量,然后输出 myvar 变量的值。DECLARE myvar char(20);SET myvar=中华人民共和国;SELECT myvar;GO,7.2 Transact-SQL语言的变量,【例7-6】创建一个名为 SEX 的局部变量,并在 SELECT 语句中使用该局部变量查找表 Student_info 中所有男同学的学号和姓名。,用 SELECT 语句赋值。语法格式:SELECT
14、local_variable=expression,,.n参数说明:local_variable:除 cursor、text、ntext、image 或 table 以外的任何类型变量的名称。变量名称必须以 at 符号()开头。expression:任何有效的 SQL Server 表达式,包括标量子查询。n:表示可以给多个变量赋值,各变量之间用“,”号分开。,7.2 Transact-SQL语言的变量,注意:local_variable通常用于将单个值返回到变量中。如果expression为列名,则返回多个值,此时将返回的最后一个赋值给变量;如果 SELECT 语句没有返回行,变量将保留当前
15、值;如果 expression 是不返回值的标量子查询,则将变量设为 NULL;包含变量赋值的 SELECT 语句不能也用于执行通常的结果集检索操作。,【例7-7】在以下示例中,为变量 var1 赋值 刘翔。由于 Student_info 表中不存在为 SID 指定的值,因此对该表的查询不返回任何行。变量的值仍为 刘翔。USE student;GO DECLARE var1 nvarchar(30);SELECT var1=刘翔;SELECT var1=SName FROM Student_info WHERE Sid=08060111;SELECT var1 AS 姓名;,7.2 Trans
16、act-SQL语言的变量,【例7-8】在以下示例中,使用了一个子查询为 var1 赋值。由于为 SID 请求的值不存在,因此子查询不返回值,并将变量设为 NULL。USE student;GO DECLARE var1 nvarchar(30)SELECT var1=Generic Name SELECT var1=(SELECT Sname FROM Student_info WHERE Sid=08060111)SELECT var1 AS 姓名;,7.2 Transact-SQL语言的变量,任务2 掌握流程控制语句,开发设计 SQL 程序时,常常要使用流程控制语句来改变计算机的执行流程以
17、满足程序设计的需要,实现较复杂的功能。SQL Server 提供的流程控制语句如表所示。,7.3 条件语句和循环语句,7.3.1 条件语句 在程序中如果要对给定的条件进行判定时,当条件为 TRUE(真)或 FALSE(假)时分别执行不同的 T-SQL 语句。1IFELSE语句 IFELSE 语句为 Transact-SQL 语句的执行强加条件。只有条件满足,才能执行条件之后的语句或语句块,否则执行 ELSE 关键字之后的语句或语句块。其中 ELSE 关键字与其后面的语句块是可选的。,语法格式:IF Boolean_expression sql_statement|statement_block
18、 ELSE sql_statement|statement_block 参数说明:Boolean_expression:返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,则必须用括号将 SELECT 语句括起来。sql_statement|statement_block:任何 T-SQL 语句或用语句块定义的语句分组。除非使用语句块,否则 IF 或 ELSE 条件只能执行一条 T-SQL 语句。若要定义语句块,请使用块定义关键字 BEGIN 和 END。,7.3.1 条件语句,从上述语法格式,可看出 IF 语句分带 ELSE 部分和不带 ELSE 部分两种使用
19、形式:,(1)带 ELSE 部分的 IF 语句:IF A/*T-SQL 语句或语句块*/ELSE B/*T-SQL 语句或语句块*/当条件表达式的值为真时执行 A,然后执行 IF 语句的下一语句;当条件表达式的值为假时执行 B,然后执行 IF 语句的下一语句。,(2)不带 ELSE 部分的 IF 语句:IF A/*T-SQL 语句或语句块*/当条件表达式的值为真时执行 A,然后执行 IF 语句的下一语句;当条件表达式的值为假时直接执行 IF 语句的下一语句。,7.3.1 条件语句,【例7-9】如果“计算机基础”的平均成绩高于80分,则显示“计算机基础课程平均成绩高于80分”,否则显示“计算机基
20、础课程平均成绩低于80分”。use student declare val char(30)set val=计算机基础课程平均成绩高于80分.if(select AVG(Grade)from Student_info,Course_info,SC where Student_info.Sid=SC.Sid and Course_info.Cid=SC.Cid and Course_info.Cname=计算机基础)80 select 计算机基础课程平均成绩低于80分.else select val,7.3.1 条件语句,【例7-10】IF.ELSE 语句的嵌套使用。use student de
21、clare val floatselect val=AVG(Grade)from Student_info,Course_info,SC where Student_info.Sid=SC.Sid and Course_info.Cid=SC.Cid and Course_info.Cname=计算机基础if val80 select 计算机基础课程平均成绩高于分.else if val80 select 计算机基础课程平均成绩低于分.else select 计算机基础课程平均成绩等于分.;,2多分支 CASE 表达式CASE 表达式用于多条件分支选择。CASE 具有两种格式:(1)简单 CA
22、SE 函数将某个表达式与一组简单表达式进行比较以确定结果。(2)CASE 搜索函数计算一组布尔表达式以确定结果。两种格式都支持可选的 ELSE 参数。,7.3.1 条件语句,语法格式:Simple CASE function:CASE input_expression WHEN when_expression THEN result_expression.n ELSE else_result_expression Searched CASE function:CASEWHEN Boolean_expression THEN result_expression.n ELSE else_resul
23、t_expression END,7.3.1 条件语句,参数说明:input_expression:使用简单 CASE 格式时所计算的表达式,可以是任意有效的表达式。WHEN Boolean_expression:使用 CASE 搜索格式时所计算的布尔表达式,可以是任意有效的布尔表达式。,7.3.1 条件语句,【例7-11】使用简单 CASE 函数更改课程编号的显示。USE student;GOSELECT Sid,cid=CASE Cid WHEN 101 THEN 计算机基础 WHEN 102 THEN 数据库技术 WHEN 103 THEN 网页设计与制作 END,Grade as 成绩
24、FROM sc,7.3.1 条件语句,【例7-12】使用带有 CASE 搜索函数的查询语句,搜索函数允许根据比较值在结果集内对值进行替换。USE student;GOSELECT sid,cid,Grade=CASE WHEN Grade 60 THEN 不及格 WHEN Grade 70 THEN 及格 WHEN Grade 80 THEN 中等 WHEN Grade=100 THEN 优秀 ENDFROM sc,7.3.1 条件语句,7.3.2 循环语句,如果需要重复执行程序中的一部分语句,可以使用 WHILE 循环语句实现,只要条件成立,语句或者语句块就会一直重复执行下去。可以使用 BR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 情景 Transact SQL 程序设计
链接地址:https://www.31ppt.com/p-5977271.html