第11章 SQL Server程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ห้องสมุดไป่ตู้
11.4.5 PRINT语句
SQL Server向客户程序返回信息的方法除了使 用SELECT语句外,还可以使用PRINT 语句, 它的语法格式为: PRINT 字符串|函数|局部变量|全局变量
11. 4.6 WHILE语句
过逻辑表达式来设置一个循环条件,当条 件为真时,重复执行一个SQL语句或语句块, 否则退出循环,继续执行后面的语句。
1. 行内注释 2.块注释
11.2 程序中的事务
11.2.1 事务概述
11.2.2 事务处理语句
11.2.3 分布式事务 11.2.4 锁定
11.2.1 事务概述
由于事务的执行机制,确保了数据能够正确 地被修改,避免造成数据只修改一部分而导致 数据不完整,或是在修改途中受到其他用户的 干扰。事务有4个原则,统称ACID原则。 · 原子性(Atomic)。 · 一致性(ConDemoltent)。 · 隔离性(Isolated)。
11.4 SQL语言流程控制
11.4.1 11.4.2 11.4.3 11.4.4 11.4.5 11.4.6 BEGIN…END语句块 IF…ELSE语句 CASE结构 WAITFOR语句 PRINT语句 WHILE语句
11.4.1 BEGIN…END语句块
BEGIN…END语句的语法格式为: BEGlN {语句组} END BEGIN…END语句块可以嵌套。
· 可用SET REMOTE_PROC_TRANSACTION 为单个会话启动分布式事务。
11.2.4 锁定
当多个用户对数据库访问时,为了确保事 务完整性和数据库一致性,需要使用锁定。如 果没有锁定,SQL Server就没有防止多个用户 同时更新同一数据的机制。一个锁就是在多用 户环境中对某一种正在使用的资源的一个限制, 它阻止其他用户访问或修改资源中的数据。 SQL Server为了保证用户操作的一致性,自动 对资源设置和释放锁。
· 持久性(Durable)。 事务可分为两种类型:系统提供的事务和用户 定义的事务。 系统提供的事务是指在执行某些T-SQL语句时, 一条语句就构成了一个事务,这些语句是: ALTER TABLE CREATE DELETE DROP FETCH GRANT INSERT OPEN REVOKE SELECT UPDATE TRUNCATE TABLE
ROLLBACK TRANSACTION语句是回滚语句, 它使得事务回滚到起点或指定的保存点处,它 也标志一个事务的结束,其语法格式为: ROLLBACK TRANSACTION [transaction_name|@tran_name_variable |savepoint_name|@savepoint_variable]
WHILE语句的语法格式为:
WHILE 逻辑表达式 BEGIN 语句块l [BREAK] 语句块2 [CONTINUE] 语句块3 END
11.5 案例应用举例
在查询分析器下创建脚本文件chaxun.sql, 用来输出所有学生各门课程的成绩,并对课程 加以备注,运行结果如图11.11所示,操作步骤 如下: (1)打开查询分析器。 (2)在查询分析器窗口中输入代码。 (3)在查询分析器“文件”菜单下单击“保存” 命令,在对话框“保存查询”中输入文件名 chaxun.sql,单击“保存(S)”按钮。
11.1.3 注释
注释是指程序中用来说明程序内容的语句, 它不能执行且不参与程序的编译。注释用于语 句代码的说明,或暂时禁用的部分语句。为程 序加上注释不仅能增强程序的可读性,而且有 助于日后的管理和维护,在程序中使用注释是 一个程序员良好的编程习惯。SQL Server支持 两种形式的注释语句。
11.3 SQL Server变量
11.3.1 全局变量
11.3.2 局部变量
11.3.1 全局变量
全局变量是系统提供且预先声明的变量。 全局变量在所有存储过程中随时有效,用户利 用全局变量,可以访问服务器的相关信息或者 有关操作的信息。用户只能引用不能改写,且 不能定义和全局变量同名的局部变量,引用时 要在前面加上@@标记 。
(2)用SET语句为局部变量赋初值 用SET语句为局部变量赋初值的语法格式如下: SET @变量名=表达式[,…n]
3.局部变量的作用域 局部变量的作用域指可以引用该变量的范 围,局部变量的作用域从声明它的地方开始到 声明它的批处理或存储过程束。也就是说,局 部变量只能在声明它的批处理、存储过程或触 发器中使用,一旦这些批处理或存储过程结束, 局部变量将自消除。
11.3.2 局部变量
局部变量是用户自己定义的,只在定义它 的批处理或存储过程中使用。一般用于变量计 数或作为其他变量值的存储元。
1. 声明局部变量
DECLARE语句的浯法格式为: DECLARE @局部变量 数据类型[1…n]
2.给局部变量赋值 所有变量声明后,均被初始化为NULL。 (1)用SELECT语句为局部变量赋初值 用SELECT为局部变量赋初值的语法格式如下: SELECT @变量名=表达式[,…n]
· COMMIT TRANSACTION语句 COMMIT是提交语句,它使得自从事务开 始以来所执行的所有数据修改成为数据库 的永久部分,也标志一个事务的结束,其 语法格式为: COMMIT TRANSACTION [transaction_name|@tran_name_variable]
· ROLLBACK TRANSACTION语句
什么是批处理呢?批处理就是一个或多个 T— SQL语句的集合,从应用程序一次性发送到 SQL Server并由SOL Server编译成一个可执行 单元,此单元称为执行计划。执行计划中的语 句每次执行一条。 建立批处理时,应当注意的几点。
11.1.2 脚本
脚本是以文件存储的一系列SQL语句,即 一系列按顺序提交的批处理。 T-SQL脚本中可以包含一个或多个批处理。 GO语句是批处理结束的标志。如果没有GO语 句,则将它作为单个批处理行。 脚本可以在查询分析器中执行,也可以在 isql或osql实用程序中执行。
第十一章
SQL Server程序设计
11.1
注释 程序中的批处理、脚本、
11.2 程序中的事务 11.3 11.4 11.5 练 习 SQL Server变量 SQL语言流程控制 案例应用举例 题
目录
11.1 程序中的批处理、脚本、 注释
11.1.1 批处理
11.1.2 脚本 11.1.3 注释
11.1.1 批处理
1. 锁定粒度 在SQL Server中,可被锁定的资源从小到 大分别是行、页、扩展盘区、表和数据库,被 锁定的资源单位称为锁定粒度,上述五种资源 单位其锁定粒度按由小到大排列。
2. 锁模式 通常,SQL Server中有三类锁。 · 共享锁:也称为读锁,是加在正在读取的数据 上的。
· 更新锁:更新锁防止别人在改变数据的过程中 修改数据。 · 排他锁:当要改变数据时使用排他锁。其他事 务不能读取或修改排他锁锁定的数据。 3. 死锁 死锁是指两个事务阻塞彼此进程而互相冲 突的情况。
11.2.3 分布式事务
SQL Server 2000可支持包括多于一台服务 器的事务,它是用MSDTC(Microsoft分布事务 合作)服务来支持的。 有3种方法可使用分布式事务: · 用DB—Lib API(应用程序接口)编写分布事务程 序,它超出了本书的范围。 · 使用T—SQL语法BEGIN DISTRIBUTED TRANSACTION。
2. 搜索CASE表达式
CASE WHEN 逻辑表达式1 THEN 结果表达式1 [WHEN 逻辑表达式2 THEN 结果表达式2 […]] [ELSE 结果表达式n] END
11.4.4 WAITFOR语句
WAITFOR语句指定触发语句块、存储过 程或事务执行的时间、时间间隔或事件。其语 法格式为: WAITFOR DELAY ‘时间’|TIME ‘时间’
11.4.2 lF…ELSE语句
IF…ELSE语句的语法格式为: IF 布尔表达式 语句1 [ELSE 语句2] 其中布尔表达式表示一个测试条件,其取 值为TRUE或FALSE。
11.4.3 CASE结构
CASE具有两种格式。 1.简单CASE表达式 CASE 条件表达式 WHEN 表达式值1 THEN 结果表达式1 [WHEN 表达式值2 THEN 结果表达式2 […]] [ELSE 结果表达式n] END
11.2.2 事务处理语句
事务处理语句包括BEGIN TRANSACTION、 COMMIT TRANSACTION和ROLLBACK TRANSACTION语句。 · BEGIN TRANSACTION语句 BEGIN TRANSACTION语句作为事务的开始, 其语法格式为: BEGIN TRANSACTION [transaction_name|@tran_name_variable] [WITH MARK[‘description’]]
练 习 题
1. 什么是全局变量?什么是局部变量? 2. 什么是事务?事务有哪些特性? 3. 怎样给变量赋值? 4. 什么是批处理?批处理的结束标志是什么? 5. 编写程序,求2~500之间的所有素数。
11.4.5 PRINT语句
SQL Server向客户程序返回信息的方法除了使 用SELECT语句外,还可以使用PRINT 语句, 它的语法格式为: PRINT 字符串|函数|局部变量|全局变量
11. 4.6 WHILE语句
过逻辑表达式来设置一个循环条件,当条 件为真时,重复执行一个SQL语句或语句块, 否则退出循环,继续执行后面的语句。
1. 行内注释 2.块注释
11.2 程序中的事务
11.2.1 事务概述
11.2.2 事务处理语句
11.2.3 分布式事务 11.2.4 锁定
11.2.1 事务概述
由于事务的执行机制,确保了数据能够正确 地被修改,避免造成数据只修改一部分而导致 数据不完整,或是在修改途中受到其他用户的 干扰。事务有4个原则,统称ACID原则。 · 原子性(Atomic)。 · 一致性(ConDemoltent)。 · 隔离性(Isolated)。
11.4 SQL语言流程控制
11.4.1 11.4.2 11.4.3 11.4.4 11.4.5 11.4.6 BEGIN…END语句块 IF…ELSE语句 CASE结构 WAITFOR语句 PRINT语句 WHILE语句
11.4.1 BEGIN…END语句块
BEGIN…END语句的语法格式为: BEGlN {语句组} END BEGIN…END语句块可以嵌套。
· 可用SET REMOTE_PROC_TRANSACTION 为单个会话启动分布式事务。
11.2.4 锁定
当多个用户对数据库访问时,为了确保事 务完整性和数据库一致性,需要使用锁定。如 果没有锁定,SQL Server就没有防止多个用户 同时更新同一数据的机制。一个锁就是在多用 户环境中对某一种正在使用的资源的一个限制, 它阻止其他用户访问或修改资源中的数据。 SQL Server为了保证用户操作的一致性,自动 对资源设置和释放锁。
· 持久性(Durable)。 事务可分为两种类型:系统提供的事务和用户 定义的事务。 系统提供的事务是指在执行某些T-SQL语句时, 一条语句就构成了一个事务,这些语句是: ALTER TABLE CREATE DELETE DROP FETCH GRANT INSERT OPEN REVOKE SELECT UPDATE TRUNCATE TABLE
ROLLBACK TRANSACTION语句是回滚语句, 它使得事务回滚到起点或指定的保存点处,它 也标志一个事务的结束,其语法格式为: ROLLBACK TRANSACTION [transaction_name|@tran_name_variable |savepoint_name|@savepoint_variable]
WHILE语句的语法格式为:
WHILE 逻辑表达式 BEGIN 语句块l [BREAK] 语句块2 [CONTINUE] 语句块3 END
11.5 案例应用举例
在查询分析器下创建脚本文件chaxun.sql, 用来输出所有学生各门课程的成绩,并对课程 加以备注,运行结果如图11.11所示,操作步骤 如下: (1)打开查询分析器。 (2)在查询分析器窗口中输入代码。 (3)在查询分析器“文件”菜单下单击“保存” 命令,在对话框“保存查询”中输入文件名 chaxun.sql,单击“保存(S)”按钮。
11.1.3 注释
注释是指程序中用来说明程序内容的语句, 它不能执行且不参与程序的编译。注释用于语 句代码的说明,或暂时禁用的部分语句。为程 序加上注释不仅能增强程序的可读性,而且有 助于日后的管理和维护,在程序中使用注释是 一个程序员良好的编程习惯。SQL Server支持 两种形式的注释语句。
11.3 SQL Server变量
11.3.1 全局变量
11.3.2 局部变量
11.3.1 全局变量
全局变量是系统提供且预先声明的变量。 全局变量在所有存储过程中随时有效,用户利 用全局变量,可以访问服务器的相关信息或者 有关操作的信息。用户只能引用不能改写,且 不能定义和全局变量同名的局部变量,引用时 要在前面加上@@标记 。
(2)用SET语句为局部变量赋初值 用SET语句为局部变量赋初值的语法格式如下: SET @变量名=表达式[,…n]
3.局部变量的作用域 局部变量的作用域指可以引用该变量的范 围,局部变量的作用域从声明它的地方开始到 声明它的批处理或存储过程束。也就是说,局 部变量只能在声明它的批处理、存储过程或触 发器中使用,一旦这些批处理或存储过程结束, 局部变量将自消除。
11.3.2 局部变量
局部变量是用户自己定义的,只在定义它 的批处理或存储过程中使用。一般用于变量计 数或作为其他变量值的存储元。
1. 声明局部变量
DECLARE语句的浯法格式为: DECLARE @局部变量 数据类型[1…n]
2.给局部变量赋值 所有变量声明后,均被初始化为NULL。 (1)用SELECT语句为局部变量赋初值 用SELECT为局部变量赋初值的语法格式如下: SELECT @变量名=表达式[,…n]
· COMMIT TRANSACTION语句 COMMIT是提交语句,它使得自从事务开 始以来所执行的所有数据修改成为数据库 的永久部分,也标志一个事务的结束,其 语法格式为: COMMIT TRANSACTION [transaction_name|@tran_name_variable]
· ROLLBACK TRANSACTION语句
什么是批处理呢?批处理就是一个或多个 T— SQL语句的集合,从应用程序一次性发送到 SQL Server并由SOL Server编译成一个可执行 单元,此单元称为执行计划。执行计划中的语 句每次执行一条。 建立批处理时,应当注意的几点。
11.1.2 脚本
脚本是以文件存储的一系列SQL语句,即 一系列按顺序提交的批处理。 T-SQL脚本中可以包含一个或多个批处理。 GO语句是批处理结束的标志。如果没有GO语 句,则将它作为单个批处理行。 脚本可以在查询分析器中执行,也可以在 isql或osql实用程序中执行。
第十一章
SQL Server程序设计
11.1
注释 程序中的批处理、脚本、
11.2 程序中的事务 11.3 11.4 11.5 练 习 SQL Server变量 SQL语言流程控制 案例应用举例 题
目录
11.1 程序中的批处理、脚本、 注释
11.1.1 批处理
11.1.2 脚本 11.1.3 注释
11.1.1 批处理
1. 锁定粒度 在SQL Server中,可被锁定的资源从小到 大分别是行、页、扩展盘区、表和数据库,被 锁定的资源单位称为锁定粒度,上述五种资源 单位其锁定粒度按由小到大排列。
2. 锁模式 通常,SQL Server中有三类锁。 · 共享锁:也称为读锁,是加在正在读取的数据 上的。
· 更新锁:更新锁防止别人在改变数据的过程中 修改数据。 · 排他锁:当要改变数据时使用排他锁。其他事 务不能读取或修改排他锁锁定的数据。 3. 死锁 死锁是指两个事务阻塞彼此进程而互相冲 突的情况。
11.2.3 分布式事务
SQL Server 2000可支持包括多于一台服务 器的事务,它是用MSDTC(Microsoft分布事务 合作)服务来支持的。 有3种方法可使用分布式事务: · 用DB—Lib API(应用程序接口)编写分布事务程 序,它超出了本书的范围。 · 使用T—SQL语法BEGIN DISTRIBUTED TRANSACTION。
2. 搜索CASE表达式
CASE WHEN 逻辑表达式1 THEN 结果表达式1 [WHEN 逻辑表达式2 THEN 结果表达式2 […]] [ELSE 结果表达式n] END
11.4.4 WAITFOR语句
WAITFOR语句指定触发语句块、存储过 程或事务执行的时间、时间间隔或事件。其语 法格式为: WAITFOR DELAY ‘时间’|TIME ‘时间’
11.4.2 lF…ELSE语句
IF…ELSE语句的语法格式为: IF 布尔表达式 语句1 [ELSE 语句2] 其中布尔表达式表示一个测试条件,其取 值为TRUE或FALSE。
11.4.3 CASE结构
CASE具有两种格式。 1.简单CASE表达式 CASE 条件表达式 WHEN 表达式值1 THEN 结果表达式1 [WHEN 表达式值2 THEN 结果表达式2 […]] [ELSE 结果表达式n] END
11.2.2 事务处理语句
事务处理语句包括BEGIN TRANSACTION、 COMMIT TRANSACTION和ROLLBACK TRANSACTION语句。 · BEGIN TRANSACTION语句 BEGIN TRANSACTION语句作为事务的开始, 其语法格式为: BEGIN TRANSACTION [transaction_name|@tran_name_variable] [WITH MARK[‘description’]]
练 习 题
1. 什么是全局变量?什么是局部变量? 2. 什么是事务?事务有哪些特性? 3. 怎样给变量赋值? 4. 什么是批处理?批处理的结束标志是什么? 5. 编写程序,求2~500之间的所有素数。