数据库原理及应用·存储过程和触发器

12.1 T-SQL中的变量

12.1.1 T-SQL概述

SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

Transact-SQL即事务SQL,也简称为T-SQL,它是微软公司对SQL语言的扩充,是SQL语言的超集,是应用程序与SQL-Server数据库引擎沟通的主要语言。T-SQL提供标准SQL的DDL和DML功能,加上延伸的函数、系统预存程序以及程序设计结构(例如 IF和WHILE)让程序设计更有弹性。

12.1.2 T-SQL中的变量

1.局部变量

局部变量是由用户自定义的变量,这些变量可以用来存储数值型、字符串型等数据,它的作用范围仅限制在程序内部。声明变量的语法代码为:

Declare {@local_variable [AS] datatype}[,...n]
Declare @name varchar(10) --声明局部变量
set @name='张三' --为变量赋值
print @name  --输出变量的值
注意:局部变量的作用范围是从声明该局部变量的地方开始到局部变量所在的批处理或者存储过程结束为止。在局部变量的作用范围以外引用该变量将引起语法错误。
Declare @name varchar(10) 
set @name='张三' 
go  --批处理结束
print @name  --@name变量的生命周期已结束

2.全局变量

全局变量是由系统提供的,用于存储一些系统信息,用户是不能定义全局变量的。全局变量的作用范围并不局限于某一程序,而是任何程序均可随时调用。

在使用全局变量时应注意以下几点:
①全局变量不能由用户定义,它们是在服务器中定义的。
②用户只能使用预先定义的全局变量。
③引用全局变量时,必须以标记符“@@”开始。
④局部变量不能与全局变量同名,否则会在程序中出现不可预测的结果。

update Courseset Ccredit =3 where Cno='B002'
go
if @@ERROR>0      PRINT '发生错误!'

如果执行上述语句发生错误,则打印信息“发生错误!” 

12.2 T-SQL中的运算符

12.2.1 运算符种类

算术运算符  +、-、*、/、%
赋值运算符  =
比较运算符  =、>、<、>=、<=、<>、!=、!<、!>
逻辑运算符  AND、OR、NOT
字符串连接符  +

12.2.1 运算符的优先级

12.3 流程控制语句

12.3.1 选择结构

IF…ELSE语句

IF 条件表达式 SQL语句1[ ELSESQL语句2
]IF 条件表达式 BEGIN语句块1END
[ ELSEBEGIN语句块2END
]

张长弓是计算机学院的学生吗?

DECLARE @院系 CHAR (20)
SELECT @院系=Sdept FROM student WHERE sname=‘张长弓'IF @院系=‘计算机学院’PRINT ‘张长弓是计算机学院的学生’
ELSEPRINT ‘张长弓不是计算机学院的学生’

CASE语句 

CASE 条件表达式WHEN 值1 THEN 语句1|语句块1[WHEN 值2 THEN 语句2|语句块2][…n][ELSE 语句块n]
END

不同院系位于不同教学楼,查询每个学生上课所在教学楼

SELECT Sname,location=CASE SdeptWHEN ‘计算机学院’  THEN ‘明理楼’WHEN ‘石工院’  THEN ‘明辩楼’WHEN ‘机电院’  THEN ‘明志楼’WHEN ‘化工院’  THEN ‘明德楼’ELSE ‘思学楼’END
FROM student

12.3.2 循环结构

WHILE语句

WHILE 条件表达式BEGINSQL语句|语句块1[BREAK]SQL语句|语句块2[CONTINUE]SQL语句|语句块3END

WHILE (select AVG(Ccredit) from course)<5BEGIN  --循环开始UPDATE Course set Ccredit=Ccredit+1IF (select MAX(Ccredit) from Course )>10BREAKELSECONTINUEEND

12.4 存储过程

12.4.1 存储过程概述

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

12.4.2 创建存储过程

使用CREATE PROCEDURE语句创建存储过程

语法:

CREATE PROCEDURE proc_name
AS
BEGINsql_statement1[sql_statement2]
END

使用EXECUTE PROCEDURE语句创建存储过程

语法:

EXECUTE proc_name

12.4.3 修改/删除存储过程

修改存储过程

ALTER PROCEDURE proc_name
ASBEGINsql_statement1[sql_statement2]END

删除存储过程

DROP PROCEDURE proc_name

12.5 带参数存储过程

被用于在运行时传递值到存储过程 这些值通过标准变量被传递。

传递值的参数被定义为输入参数。

CREATE PROCEDURE proc_name @参数 类型

 输出参数

CREATE PROCEDURE proc_name @参数 类型 OUTPUT

在新一轮的培养方案调整中,要求所有课程的平均学分不能低于5分,且单门课程的学分不能超过10分,应该如何调整每门课程的学分?

Create Procedure prcAVG @课程名 char(30), @平均成绩 FLOAT OUTPUT
AS
BEGINSelect @平均成绩 =AVG(Grade) From SC where Tno= (Select Cno From Course where Cname = @课程名)
ENDDECLARE @avgGrade float
EXECUTE prcAVG ‘数据库’, @avgGrade OUTPUT 

12.6  触发器

触发器就是一种特殊的存储过程;

触发器可以自动执行,不依赖EXECUTE语句。

触发器与表的关系密切,用于保护表中的数据。

12.6.1 魔表

12.6.2 创建触发器

使用CREATE TRIGGER语句来创建触发器

语法:

CREATE TRIGGER trigger_name ON { OBJECT NAME } { FOR | AFTER | INSTEAD OF } { event_type [,...n ] |      DDL_DATABASE_LEVEL_EVENTS }   { AS { sql_statement [ ...n ] }}

修改Course表时,自动将ModifiedDate设为当前时间

create trigger trgTime on Course
after update as
beginupdate Courseset ModifiedDate=getdate()  from inserted
where Course.cno=inserted.cno
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/580395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gateway集成方法以及拦截器和过滤器的使用

前提&#xff1a;请先创建好一个SpringBoot项目 1. 引入依赖 SpringCloud 和 alibabaCloud 、 SpringBoot间对版本有强制要求&#xff0c;我使用的springboot是3.0.2的版本。版本对应关系请看&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki GitHub <dependency…

(windows2012共享文件夹和防火墙设置

windows2012共享文件夹和防火墙设置 1.windows2012文件夹共享1.共享和高级共享的区别![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0d815cc6862a4c7a99be11442fb5d950.png#pic_center) 2.windows的防火墙设置1.防火墙设置8080端口让tomot可以在主机可以访问1.新建…

中间件系列 - Redis入门到实战(高级篇-最佳实践)

前言 学习视频&#xff1a; 黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目中间件系列 - Redis入门到实战本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除学习目标 Redis键值设计批处理优化服…

电商数据分析-03-电商数据采集

参考 最最最全数据仓库建设指南&#xff0c;速速收藏&#xff01;&#xff01; 第1章 数据仓库概念 数据仓库规划 1.1 数仓搭建 我们这里所说的数据仓库&#xff0c;是基于大数据体系的&#xff0c;里面包含标签类目&#xff0c;区别于传统的数据仓库。下面我们来将这张图分解…

STM32 支持IAP的bootloader开发,使用串口通过Ymodem协议传输固件

资料下载: https://download.csdn.net/download/vvoennvv/88658447 一、概述 关于IAP的原理和Ymodem协议&#xff0c;本文不做任何论述&#xff0c;本文只论述bootloader如何使用串口通过Ymodem协议接收升级程序并进行IAP升级&#xff0c;以及bootloader和主程序两个工程的配置…

dxbuilder关于开发一款国产数据库建模软件的思考与行动

一、背景 随着一声紧急的呼叫&#xff0c;快快快。把你们有安装PownerDesigner的软件都卸载掉&#xff0c;公司被发律师函了&#xff0c;这是来自于领导的呼喊。 我们公司大部分的软件的数据结构&#xff0c;都是用PownerDesigner来进行设计的。以便进行后期的管理与维护。不…

Vue学习之第一、二章——Vue核心与组件化编程

第一章. Vue核心 1.1 Vue简介 1.1.1 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ 1.1.2 Vue特点 遵循 MVVM 模式编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发它本身只关注 UI, 也可以引入其它第三方库开发项目 1.2 初始Vue 这里可以参考&a…

ios 之 数据库、地理位置、应用内跳转、推送、制作静态库、CoreData

第一节&#xff1a;数据库 常见的API SQLite提供了一系列的API函数&#xff0c;用于执行各种数据库相关的操作。以下是一些常用的SQLite API函数及其简要说明&#xff1a;1. sqlite3_initialize:- 初始化SQLite库。通常在开始使用SQLite之前调用&#xff0c;但如果没有调用&a…

“京东”数据包暴雷——李逵还是李鬼?

大家好&#xff0c;我是吴军&#xff0c;一家软件技术开发公司的产品经理。 前几个月市面上出现了一个京东数据包的项目&#xff0c;乍一听还蛮正规的&#xff0c;强子不卖货&#xff0c;去做数据服务了&#xff1f;他究竟是怎么一个盈利方式&#xff1f;到底是李逵还是李鬼&a…

【新资讯】《网络安全事件报告管理办法(征求意见稿)》正在公开征求意见

近年来网络安全事故频发&#xff0c;造成了不少损失和危害。为了减少网络安全事故的发生&#xff0c;规范网络安全事件的报告&#xff0c;国家互联网信息办公室根据《中华人民共和国网络安全法》等法律法规起草了《网络安全事件报告管理办法&#xff08;征求意见稿&#xff09;…

释放创意,点亮视频!红巨星Magic Bullet Looks带给您绚丽的色彩魔法

Red Giant Magic Bullet Looks 是一款适用于Mac的视频后期处理软件。它是由Red Giant公司开发的一款专业级颜色校正和调色工具&#xff0c;旨在帮助电影制作人、视频编辑和摄影师实现令人惊叹的视觉效果。 Magic Bullet Looks 提供了一个直观而强大的用户界面&#xff0c;使用…

Linux操作系统(Crontab计划任务+NTP时间同步服务器)

如何修改linux系统时间 与时间相关的命令&#xff0c;查看当前的时间 运行 date 即可 cal 查看当前月份的日历 运行 timedatectl 查看时间详细参数 &#xff08; NTP&#xff1a; network time protocol 网络时间协议 &#xff09; &#xff08; local time : 本地时间 &#x…

大创项目推荐 深度学习LSTM新冠数据预测

文章目录 0 前言1 课题简介2 预测算法2.1 Logistic回归模型2.2 基于动力学SEIR模型改进的SEITR模型2.3 LSTM神经网络模型 3 预测效果3.1 Logistic回归模型3.2 SEITR模型3.3 LSTM神经网络模型 4 结论5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 …

智能优化算法应用:基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鱼鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鱼鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…

6、IDEA集成GitHub/码云

这里写目录标题 1、设置GitHub账号2、分享工程到GitHub3、Push推送本地库到远程库4、Pull拉取远程库到本地库5、Clone克隆远程库到本地6、码云简介 1、设置GitHub账号 可以采用两种登录方式&#xff1a;账户密码登入、口令登入。 2、分享工程到GitHub 先在GitHub中创建一个远…

【Hive_05】企业调优1(资源配置、explain、join优化)

1、 计算资源配置1.1 Yarn资源配置1.2 MapReduce资源配置 2、 Explain查看执行计划&#xff08;重点&#xff09;2.1 Explain执行计划概述2.2 基本语法2.3 案例实操 3、分组聚合优化3.1 优化说明&#xff08;1&#xff09;map-side 聚合相关的参数 3.2 优化案例 4、join优化4.1…

ARCGIS PRO SDK GeometryEngine处理独立几何图形的函数

1、面积类&#xff1a;pol为Polygon 1).Area&#xff1a;获取几何图形的面积。这是使用二维笛卡尔数学来计算面积的平面测量 double d GeometryEngine.Instance.Area(pol) 2).GeodesicArea:获取几何图形的椭球面积 …

highcharts的甘特图设置滚动时表头固定,让其他内容跟随滚动

效果图&#xff1a;最左侧的分类列是跟随甘特图滚动的&#xff0c;因为这一列如果需要自定义&#xff0c;比如表格的话可能会存在行合并的情况&#xff0c;这个时候甘特图是没有办法做的&#xff0c;然后甘特图的表头又需要做滚动时固定&#xff0c;所以设置了甘特图滚动时&…

Python测试框架pytest核心库pluggy详解

代码案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 import pluggy # HookspecMarker 和 HookimplMarker 实质上是一个装饰器带参数的装饰器类&#xff0c;作用是给函数增加额外的…

【vue滚动条插件vuescroll】【vue自定义滚动条】

文章目录 前言一、使用步骤1.下载2.引入库三、在组件中如何使用&#xff1f;四、跳转到顶部的方法scrollTo() 五、效果总结 前言 由于浏览器自带的滚动条比较不符合设计图&#xff0c;所以在大部分项目中&#xff0c;我们都会自定义滚动条的样式&#xff0c;来还原设计图&…