当前位置: 首页 > news >正文

存储过程和触发器

目录

1、存储过程

1.1 存储过程的概述

1.2 存储过程的类型

1. 系统存储过程

2. 本地存储过程

3. 临时存储过程

4. 扩展存储过程

1.3 T-SQL创建存储过程

1.4 T-SQL执行存储过程

1.5 T-SQL查看存储过程

1.6 T-SQL修改存储过程

1.7 T-SQL删除存储过程

2、触发器

2.1 触发器的概述

2.2 触发器的类型

1.DML触发器

2.DDL 触发器

3.登录触发器

2.3 T-SQL创建触发器

1. 创建触发器的注意事项

2. DML触发器

3. DDL触发器

2.4 T-SQL查看触发器

2.5 T-SQL修改触发器

2.6 T-SQL禁用和启用触发器

2.7 T-SQL删除触发器


 T-SQL的语法约定

数据库的概念和操作-CSDN博客

1、存储过程

1.1 存储过程的概述

存储过程是一组在数据库系统中为了完成特定功能T-SQL语句的集合,经编译后独立存储在数据库中。当需要其功能时,只需要通过存储过程名并给出参数(如果存储过程有参数的情况)调用即可,且存储过程只在首次执行时进行编译,而不需要每次执行时重新编译,所以比单个T-SQL语句块的运行速度快。

存储过程是SQL Server中一个非常有用的工具。SQL Server支持存储过程和系统过程。存储过程是独立存在于表之外的数据对象。可以客户调用,也可以从另一个过程触发器调用参数可以被传递和返回出错代码也可以被检验到

1.2 存储过程的类型

1. 系统存储过程

系统存储过程是安装SQL Server 2014时自动创建的。系统存储过程能执行许多管理性和信息性活动(如获取数据库信息或者数据库对象的信息等)。系统过程主要存储在master数据库中并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息可以在其他数据库中被调用

2. 本地存储过程

本地存储过程也称为用户定义存储过程,是由用户自行创建并存储在用户数据库中的存储过程,一般所说的存储过程指的就是本地存储过程

3. 临时存储过程

临时存储过程可分为以下两种:

(1)本地临时存储过程

如果在创建存储过程时,其名称以#”号开头,则该存储过程将成为一个存储在tempdb数据库中的本地临时存储过程

(2)全局临时存储过程

如果在创建存储过程时,其名称以##”号开头,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程

不论创建的是本地临时存储过程还是全局临时存储过程,只要SQL Server 2014停止运行它们将不复存在

4. 扩展存储过程

扩展存储过程是用户可以使用外部程序语言(例如C语言)编写的存储过程。显而易见,扩展存储过程可以弥补SQL Server 2014的不足,并按需要自行扩展其功能。

扩展存储过程在使用和执行上与一般的存储过程完全相同,为了区别,扩展存储过程的名称通常以XP_开头。扩展存储过程是以动态链接库(DLL)的形式存在,能让SQL Server 2014动态地装载和执行。扩展存储过程一定要存储在系统数据库master中

1.3 T-SQL创建存储过程

CREATE {PROC|PROCEDURE} [schema_name.]procedure_name
[ @parameter data_type [=default] [OUT|OUTPUT|[READONLY]] [,...n] 
AS {[BEGIN] sql_statement [...n] [END]}

PROC|PROCEDURE:PROCEDURE可以简写为PROC

OUT|OUTPUT|READONLY:

OUT|OUTPUT输出型参数,类似于引用。

READONLY不能在过程的主体中修改参数参数类型为表值类型必须指定READONLY

1.4 T-SQL执行存储过程

[EXEC|EXECUTE] procedure_name [[@parameter=]{value|@variable[OUTPUT]}] [,...n]

EXEC|EXECUTE:EXECUTE可以简写为EXEC,如果存储过程是批处理中的第一条语句,那么可以省略EXECUTE关键字。

@parameter=:关键字参数,明确指定哪个实参传递给那个形参。

@variable OUTPUT:输出型参数,形参和实参的位置都要写OUTPUT

1.5 T-SQL查看存储过程

SP_HELPTEXT 'name' -- 命令语句
SP_HELP ['name'] -- 名称、架构名、类型、创建时间、参数
-- name省略时,显示所有数据库对象

1.6 T-SQL修改存储过程

与T-SQL创建存储过程相同,只是把CREATE 换成 ALTER

1.7 T-SQL删除存储过程

DROP {PROC|PROCEDURE} {[schema_name.]procedure_name} [,...n]

2、触发器

2.1 触发器的概述

触发器是一种特殊存储过程,它会在特定的事件或条件自动执行

优点:

1. 强制实现比CHECK约束更复杂数据的完整性

2. 实现自定义的错误信息提示。

3. 对数据库中的相关表实现级联修改和删除。

4. 可调用更多的存储过程

5. 禁止或回滚违反引用完整性(主键外键)的更改。

2.2 触发器的类型

1.DML触发器

DML触发器是当数据库服务器中发生数据操作语言(DML)事件时会自动执行的存储过程。DML事件包括在指定表或视图中修改数据的INSERT语句、UPDATE语句或DELETE语句。DML触发器可用于强制业务规则和数据完整性、查询其他表并包括复杂的T-SQL语句。

SQL Server 2014的DML触发器分为两类:

①AFTER触发器

在执行INSERT、UPDATE、MERGE或DELETE语句的操作之后执行AFTER触发器。 AFTER触发器只能在表上定义,可以为针对表的同一操作定义多个触发器。

②INSTEAD OF触发器

与AFTER触发器不同,INSTEAD OF触发器一般用来取代原来的操作,它是在数据变更之前触发的,它并不执行原来的操作语句(INSERT、UPDATE或DELETE),而去执行触发器本身所定义的操作。 INSTEAD OF触发器不仅可以定义在表上,也可以定义在视图上

2.DDL 触发器

DDL触发器在响应数据定义语言(DDL)语句时触发,DDL触发器一般用于数据库中执行管理任务。

当在执行触发DDL触发器的DDL语句后,DDL触发器才会触发。DDL触发器无法作为INSTEAD OF触发器使用。

3.登录触发器

登录触发器将为响应 LOGIN 事件而激发存储过程。

2.3 T-SQL创建触发器

1. 创建触发器的注意事项

(1) CREATE TRIGGER语句必须是批处理的第一条语句只能用于一个表或视图

(2) 创建触发器的权限默认为表的所有者不能将该权限转让给其他用户

(3) 虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建

(4) 虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表,不应引用系统表,而应使用系统架构视图。

(5) TRUNCATE TABLE 语句类似于没有WHERE字句的DELETE语句,但不会激发DELETE触发器

2. DML触发器
CREATE TRIGGER [schema_name.]trigger_name 
ON {table|view} 
{FOR|AFTER|INSTEAD OF}  -- FOR=AFTER
{[INSERT][,][UPDATE][,][DELETE]}
AS {sql_statement[ ,...n ] }

 ROLLBACK:是回滚,类似于撤销。

inserted表:表中insert的数据。

deleted表:表中delete的数据。update是新数据在inserted表,旧数据在deleted表。 

例1:静止修改course表

use teaching
go
create trigger unupdate_c
on course
after update
as
beginraiserror( '禁止修改course表',16,1)rollback
end

例2:触发器级联更新,更新course表的cno,sc表中的cno也随之改变。

use teaching
go
create trigger C_sc_UP
on course
after update
asif update(cno)begindeclare @cno1 char(4),@cno2 char(4)select @cno1 = cno from insertedselect @cno2 = cno from deletedupdate scset cno = @cno1where cno = @cno2end
go

例3:触发器的引用完整性(主键外键),向sc表中插入数据,判断数据是否在student和course中存在。

create trigger tr_sc on sc
for insert
asif not exists(select * from student where sno = (select sno from inserted)) ornot exists(select * from course where cno = (select cno from inserted))beginprint '您要插入的sno或cno有误'rollbackend
go
3. DDL触发器
CREATE TRIGGER [schema_name.]trigger_name 
ON {ALL SERVER|DATABASE} -- 当前服务器|当前数据库
{FOR|AFTER}  -- 没有INSTEAD OF
{event_type|event_group}[,...n]
AS {sql_statement[ ,...n ] }

event_type:如:CREATE_TABLE、ALTER_TABLE、DROP_TABLE……

event_group:如:DDL_TABLE_EVENTS(包含了CREATE_TABLE、ALTER_TABLE、DROP_TABLE)

2.4 T-SQL查看触发器

SP_HELPTEXT 'name' -- 命令语句
SP_HELP ['name'] -- 名称、架构名、类型、创建时间、参数
-- name省略时,显示所有数据库对象

2.5 T-SQL修改触发器

与T-SQL创建触发器相同,只是把CREATE 换成 ALTER

2.6 T-SQL禁用和启用触发器

禁用或启用DML触发器的T-SQL语句的语法格式如下:

ALTER TABLE table_name 
ENABLE|DISABLE TRIGGER [ALL|trigger_name[ ,...n ]]

禁用或启用DDL触发器的T-SQL语句的语法格式如下:

ENABLE|DISABLE TRIGGER {[schema_name.][ALL|trigger_name[ ,...n ]]}
ON {object_name|DATABASE|ALL SERVER}

例:禁用teaching数据库中的safety触发器

DISABLE TRIGGER safety on database

2.7 T-SQL删除触发器

DROP TRIGGER trigger_name

相关文章:

存储过程和触发器

目录 1、存储过程 1.1 存储过程的概述 1.2 存储过程的类型 1. 系统存储过程 2. 本地存储过程 3. 临时存储过程 4. 扩展存储过程 1.3 T-SQL创建存储过程 1.4 T-SQL执行存储过程 1.5 T-SQL查看存储过程 1.6 T-SQL修改存储过程 1.7 T-SQL删除存储过程 2、触发器 2.1 …...

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…...

【深度学习实战】kaggle 自动驾驶的假场景分类

本次分享我在kaggle中参与竞赛的历程,这个版本是我的第一版,使用的是vgg。欢迎大家进行建议和交流。 概述 判断自动驾驶场景是真是假,训练神经网络或使用任何算法来分类驾驶场景的图像是真实的还是虚假的。 图像采用 RGB 格式并以 JPEG 格式…...

Spring Boot 和微服务:快速入门指南

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...

qt QPainter setViewport setWindow viewport window

使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况,以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染(分别对应下方demo1,demo2,demo3)。 setViewpo…...

网络安全面试题汇总(个人经验)

1.谈一下SQL主从备份原理? 答:主将数据变更写入自己的二进制log,从主动去主那里去拉二进制log并写入自己的二进制log,从而自己数据库依据二进制log内容做相应变更。主写从读 2.linux系统中的计划任务crontab配置文件中的五个星星分别代表什么&#xff…...

【网络云SRE运维开发】2025第3周-每日【2025/01/14】小测-【第13章ospf路由协议】理论和实操

文章目录 选择题(10道)理论题(5道)实操题(5道) 【网络云SRE运维开发】2025第3周-每日【2025/01/14】小测-【第12章ospf路由协议】理论和实操 选择题(10道) 在OSPF协议中&#xff0c…...

FreeType 介绍及 C# 示例

FreeType 是一个开源的字体渲染引擎,用于将字体文件(如 TrueType、OpenType、Type 1 等)转换为位图或矢量图形。它广泛应用于操作系统、图形库、游戏引擎等领域,支持高质量的字体渲染和复杂的文本布局。 FreeType 的核心功能 字体…...

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行:清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏? 2️⃣清除测试数据:连接数据库setup线程组 ①明确…...

Linux网络知识——路由表

路由表 1 定义与作用 Linux路由表是一个内核数据结构,用于描述Linux主机与其他网络设备之间的路径,以及如何将数据包从源地址路由到目标地址。路由表的主要作用是指导数据包在网络中的传输路径,确保数据包能够准确、高效地到达目标地址。 …...

浅谈云计算14 | 云存储技术

云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…...

AI 编程工具—Cursor进阶使用 阅读开源项目

AI 编程工具—Cursor进阶使用 阅读开源项目 首先我们打开一个最近很火的项目browser-use ,直接从github 上克隆即可 索引整个代码库 这里我们使用@Codebase 这个选项会索引这个代码库,然后我们再选上这个项目的README.md 文件开始提问 @Codebase @README.md 这个项目是用…...

使用 WPF 和 C# 将纹理应用于三角形

此示例展示了如何将纹理应用于三角形,以使场景比覆盖纯色的场景更逼真。以下是为三角形添加纹理的基本步骤。 创建一个MeshGeometry3D对象。像往常一样定义三角形的点和法线。通过向网格的TextureCoordinates集合添加值来设置三角形的纹理坐标。创建一个使用想要显示的纹理的 …...

Elasticsearch搜索引擎(二)

RestClient 基础 前言一、RestAPI1. 初始化 *RestClient*2. 创建索引库3. 删除索引库4. 判断索引库是否存在 二、RestClient操作文档1.新增文档2.查询文档3. 删除文档4. 修改文档5. 批量导入文档 前言 ES官方提供了各种不同语言的客户端用来操作ES,这些客户端的本质…...

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录 1 三维空间里的旋转与欧拉角,四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…...

走出实验室的人形机器人,将复刻ChatGPT之路?

1月7日,在2025年CES电子展现场,黄仁勋不仅展示了他全新的皮衣和采用Blackwell架构的RTX 50系列显卡,更进一步展现了他对于机器人技术领域,特别是人形机器人和通用机器人技术的笃信。黄仁勋认为机器人即将迎来ChatGPT般的突破&…...

如何使用wireshark 解密TLS-SSL报文

目录 前言 原理 操作 前言 现在网站都是https 或者 很多站点都支持 http2。这些站点为了保证数据的安全都通过TLS/SSL 加密过,用wireshark 并不能很好的去解析报文,我们就需要用wireshark去解密这些报文。我主要讲解下mac 在 chrome 怎么配置的&…...

电脑有两张网卡,如何实现同时访问外网和内网?

要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…...

定义:除了Vue内置指令以外的其他 v-开头的指令(需要程序员自行扩展定义)作用:自己定义的指令, 可以封装一些 dom 操作, 扩展

1.自定义指令(directives) 1.用法 定义:除了Vue内置指令以外的其他 v-开头的指令(需要程序员自行扩展定义)作用:自己定义的指令, 可以封装一些 dom 操作, 扩展额外功能 语法: ① 局部注册 ●inserted:被绑…...

SpringBoot错误码国际化

先看测试效果: 文件结构 1.中文和英文的错误消息配置 package com.ldj.mybatisflex.common;import lombok.Getter;/*** User: ldj* Date: 2025/1/12* Time: 17:50* Description: 异常消息枚举*/ Getter public enum ExceptionEnum {//# code命名规则:模…...

LeetCode 3066.超过阈值的最少操作数 II:模拟 - 原地建堆O(1)空间 / 优先队列O(n)空间

【LetMeFly】3066.超过阈值的最少操作数 II:模拟 - 原地建堆O(1)空间 / 优先队列O(n)空间 力扣题目链接:https://leetcode.cn/problems/minimum-operations-to-exceed-threshold-value-ii/ 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一次…...

深度学习中的模块复用原则(定义一次还是多次)

文章目录 1. 模块复用的核心原则(1)模块是否有**可学习参数**(2)模块是否有**内部状态**(3)模块的功能需求是否一致 2. 必须单独定义的模块(1)nn.Linear(全连接层&#x…...

Mac——Cpolar内网穿透实战

摘要 本文介绍了在Mac系统上实现内网穿透的方法,通过打开远程登录、局域网内测试SSH远程连接,以及利用cpolar工具实现公网SSH远程连接MacOS的步骤。包括安装配置homebrew、安装cpolar服务、获取SSH隧道公网地址及测试公网连接等关键环节。 1. MacOS打开…...

安全测评主要标准

大家读完觉得有帮助记得关注和点赞!!! 安全测评的主要标准‌包括多个国际和国内的标准,这些标准为信息系统和产品的安全评估提供了基础和指导。 一、安全测评的主要标准 1.1、国际标准 ‌可信计算机系统评估准则(TC…...

qBittorent访问webui时提示unauthorized解决方法

现象描述 QNAP使用Container Station运行容器,使用Docker封装qBittorrent时,访问IP:PORT的方式后无法访问到webui,而是提示unauthorized,如图: 原因分析 此时通常是由于设备IP与qBittorrent的ip地址不在同一个网段导致…...

504 Gateway Timeout:网关超时解决方法

一、什么是 504Gateway Timeout? 1. 错误定义 504 Gateway Timeout 是 HTTP 状态码的一种,表示网关或代理服务器在等待上游服务器响应时超时。通俗来说,这是服务器之间“对话失败”导致的。 2. 常见触发场景 Nginx 超时:反向代…...

Vue 实现当前页面刷新的几种方法

以下是 Vue 中实现当前页面刷新的几种方法&#xff1a; 方法一&#xff1a;使用 $router.go(0) 方法 通过Vue Router进行重新导航&#xff0c;可以实现页面的局部刷新&#xff0c;而不丢失全局状态。具体实现方式有两种&#xff1a; 实现代码&#xff1a; <template&g…...

MCP Server开发的入门教程(python和pip)

使用python技术栈开发的简单mcp server 需要安装 MCP server的需要使用python-sdk,python需要 3.10,安装如下 pip install mcpPS: MCP官方使用的是uv包管理工具,我平时使用pip比较多,所以文中以pip为主。因为mcp的一些依赖包版本并不是最新的,所以最好弄一个干净的环境…...

手撕Transformer -- Day7 -- Decoder

手撕Transformer – Day7 – Decoder Transformer 网络结构图 目录 手撕Transformer -- Day7 -- DecoderTransformer 网络结构图Decoder 代码Part1 库函数Part2 实现一个解码器Decoder&#xff0c;作为一个类Part3 测试 参考 Transformer 网络结构 Decoder 代码 Part1 库函数…...

C#异步和多线程,Thread,Task和async/await关键字--12

目录 一.多线程和异步的区别 1.多线程 2.异步编程 多线程和异步的区别 二.Thread,Task和async/await关键字的区别 1.Thread 2.Task 3.async/await 三.Thread,Task和async/await关键字的详细对比 1.Thread和Task的详细对比 2.Task 与 async/await 的配合使用 3. asy…...