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

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,一经查实,立即删除!

相关文章

effective c++ 笔记 导读/条款2-4

导读 explicit关键字 阻止类型之间的隐式转换。 class B{explict B(int x 0); } Void doSomething&#xff08;b BObject); doSomething(B(28)); //正确 doSomething(28); //错误copy构造和copy赋值 Class Object{Object(): //default构造Object(const Object& obj); …

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

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

VSCode 加Cortex-Debug嵌入式调试方法

简介 当使用ARM Cortex-M微控制器时&#xff0c;Cortex-Debug是一个Visual Studio Code的扩展&#xff0c;以简化调试过程。本文档介绍了如何编写启动配置(launch.json)。 settings.json配置 打开VSCode用户设置文件settings.json: 文件→偏好→设置选择用户设置: 在搜索栏中…

(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;区别于传统的数据仓库。下面我们来将这张图分解…

Java中的单元测试

单元测试 单元测试概述: 单元测试是指在软件开发中对软件的最小可测试单元进行测试和验证的过程。最小可测试单元通常是指函数、方法或者类&#xff0c;单元测试可以保证开发人员的代码正确性&#xff0c;同时也方便后期维护和修改。单元测试的主要目的是检测代码的正确性&am…

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来进行设计的。以便进行后期的管理与维护。不…

前端面试题html

HTML DOCTYPE有什么作用&#xff1f; DOCTYPE是一种指示浏览器以何种HTML或XHTML规范来解析文档的声明。它能够告知浏览器网页文档使用的标记语言的类型以及版本&#xff0c;从而确保浏览器能够正确地展示网页内容。DOCTYPE声明通常位于HTML文档的开头&#xff0c;是HTML文档…

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…

31--设计模式、面向对象设计原则

1、设计模式 1.1 设计模式概述 设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式不是一种方法和技术&#xff0c;而…

自定义删除无依赖文件的webpack插件

插件原理 通过自定义webpack插件&#xff0c;利用执行完成编译的封存阶段后&#xff0c;产生的产物module.fileDependencies&#xff0c;生成依赖的文件组。通过读文件的方式&#xff0c;将待扫描的文件组和有依赖关系的文件进行对比。最终暴露出项目中&#xff0c;不存在依赖…

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…

volatile关键字详解

volatile 关键字详解 介绍 Java中的volatile关键字是一个用于确保变量在多线程环境下的可见性和部分有序性的修饰符。当一个字段被声明为volatile时&#xff0c;它具有以下特性&#xff1a; 可见性&#xff1a;在多线程环境中&#xff0c;一个线程修改了一个volatile变量的值…

采用curl -w测试接口或域名访问速度

命令&#xff1a; curl -o /dev/null -H "Cache-Control: no-cache" -s -w time_namelookup:"\t"%{time_namelookup}"\n"time_connect:"\t\t"%{time_connect}"\n"time_pretransfer:"\t"%{time_pretransfer}&quo…