数据库——后台编程

目标

1 掌握存储过程的定义与使用
2 掌握用户定义函数的创建与使用
3 掌握触发器的定义与使用
4 掌握游标的定义与使用

基本概念

使用T-SQL 语言编写代码时,有两种方式存储和执行代码
(1)在客户端存储代码,通过客户端程序或SQL 命令向DBMS 发出操作请求,由DBMS 将结果返回给用户程序
(2) 以子程序的形式将程序模块存储在数据中,供有权限的用户通过调用反复执行

存储过程:存储在数据库中供所有用户程序调用的子程序
存储过程分为三类:
系统存储;用户自定义存储;扩展存储过程

用户自定义存储过程是由用户创建并能完成某一个特定功能(如查询用户所需要数据信息)的存储过程。本节详细介绍用户自定义的存储过程

扩展存储过程:SQL Server 可以动态转载并执行动态链接库(DLL)。扩展存储过程使您得以使用像C 这样的编程语言 创建自己的外部例程,对用户来说,扩展存储过程与普通存储过程一样,执行方法也相同

存储过程的优点:
极高的执行效率
增强代码的重用性和共享性
使用存储过程可以减少网络流量
使用存储过程保证安全性
在大型数据库中,应用程序访问数据库的主要方式就是存储过程
存储过程可以在系统启动时自动执行

创建,执行和删除存储过程
存储过程定义包含连个主要组成部分
1 过程名称及其参数的说明
2 过程的主体(其中包含执行过程操作的 T-SQL 语句)创建存储过程的语法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除存储过程:
DROP PROCEDURE
实例
DROP PROCEDURE p_custbuy

用户定义函数:
类似于编程余姚中的函数,其结构与存储过程类似,但函数必须有一个return 子句,用于返回函数值

两类用户定义函数:
标量函数和表值函数,前者返回单个数据值,表值函数返回一个表

创建和调用标量函数
CREATE FUCTION …RETURNS return_data_type
AS
BEGIN
[函数体]
RETURN scalar_expression
END
在这里插入图片描述
调用标量函数
注意:调用时需要提供函数拥有者名和函数名
可以在任何出现表达式的SQL 语句中调用类型一致标量函数
在这里插入图片描述
创建和调用内嵌表值函数
创建内联表值函数
CREATE FUCTION …RETURN TABLE
AS
RETURN [(select_stmt)]
参数说明:select_stmt 是定义内联表值函数返回值得单个SELECT 语句;表值函数没有返回变量,没有函数体,只返回一个查询结果

调用内联表值函数
使用内联表值函数与视图类似,其作用相当于带参数的视图
在这里插入图片描述
创建和调用多语句表值函数
CREATE FUCTION …RETURNS @ return_variable
TABLE <table_type_definition 定义返回的表结构>
AS
BEGIN
[函数体:SQL 语句]
return
END
调用多语句表值函数 :在SELECT 的FROM 字句中的使用
在这里插入图片描述
在这里插入图片描述
4 删除用户自定义函数
DROP FUNCTION
实例
DROP FUNCTION f_GoodsCount

触发器

基本概念:特殊存储,在对表中的数据进行UPDATE ,INSERT,DELETE 操作时自动触发执行,常用于保证业务规则和数据完整性,增强数据完整性约束能力
SQL Server 2008 支持三种类型的触发器:DML DDL 登录触发器

适用场合:
1 完成比CHECK (只能实现同一表列之间取值约束)约束更复杂的数据约束
2 保证数据库性能而维护的非规范化数据
3 实现复杂的商业规则
4 评估数据修改后的表状态,而采取对策

创建触发器
CREATE TRIGGER trigger_name ON
{table|view}
[WITH ENCRYPTION]
{FOR|AFTER|INSTEAD OF}
{[INSERT][,][UPDATE][,]
[DELETE]
}
AS
sql_statement[…n]

参数说明:
FOR或AFTER :后触发型,操作,约束检查完成后出发
INSERT OF :前出发型,数据操作语句最多定义一个触发器,执行触发器而非引起语句,若满足完整性约束规则则需要重新执行这些数据操作

注意:
一个表可建多个触发器,每个触发器可由三个操作触发。ALTER类型操作同一个操作上建立多个触发器,INSTEAD OF 类型同一操作建立一个触发器
所有建立和更改数据以及数据库对象的语句,DROP 语句不允许在触发器中
触发器不要返回任何结果

实例1 :维护不同例的取值完整性的触发器,保证,商品表中单价列值与商品价格变动表中单价列值一致在这里插入图片描述
在这里插入图片描述
删除触发器
DROP TRIGGER
实例
DROP TRIGGER operation
DROP TRIGGER UnitPriceConsistent
DROP TRIGGER DeleteCust

游标

游标组成:
游标结果集(SELECT 返回结果集)与游标当前行指针(指向结果集中某一行)
特点:定位特定行;从当前位置检索一行或多行;支持当前行数据修改;对修改结果提供不同等级别的可见性支持

使用游标:
(1)声明游标:
ISO 标准语法:DECLARE cursor_name[1] CURSOR FOR select_statement[2]
参数说明:(1)INSENSTITIVE: 创建临时副本,对临时表操作,否则对基本表;SCROLL:范围,否则支持NEXT
(2) 打开游标
OPEN cursor_name

(3) 提取数据
FETCH [1] FROM cursor_name [INTO @ variable_name [,…n]]
(4) 关闭游标
CLOSE cursor_name
可以再次打开
(5) 释放游标
DEALLOCATE curssor_name
释放分配给游标的所有资源
在这里插入图片描述
在这里插入图片描述

发布了12 篇原创文章 · 获赞 0 · 访问量 254

猜你喜欢

转载自blog.csdn.net/inventertom/article/details/104802252