SQLSever触发器建立

2024-02-25 15:18
文章标签 触发器 建立 sqlsever

本文主要是介绍SQLSever触发器建立,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先附上示例代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE TRIGGER  trigUserDeleteON  userTable instead of delete
AS 
BEGINdeclare @num varchar(20)	select @num=phoneNum from deleteddelete customRoute where userId=@numdelete userLocat where phoneNum=@numdelete userTable where phoneNum=@num
END
GO

什么是触发器?在我的理解中:它不是人为启动的,而是系统自动启动的,就像事件一样,当触发条件满足时,就会执行触发器里面的内容。

在上述实例代码中,在表userTable中定义了一个名为trigUserDelete的删除(delete)触发器。

在我的数据库中有 customRoute,userLocat,userTable这三个表,前两表存在字段与userTable表中的phoneNum存在外键关系。现在要根据phoneNum来删除用户表(userTable)的内容。

userLocat(a,phoneNum):a为主键,phoneNum为外键(来自于userTable.phoneNum) 

 userTable(phoneNum,c,d) :phoneNum为主键 

 如果我把字段phoneNum的外键属性去掉,对编程没什么影响。 如果不去,userLocat中的phoneNum要么为空,要么是在userTable的phoneNum中存在的值。有外键的时候,数据库会自动帮你检查userLocat的phoneNum是否在UserTable的中存在。如果不存在,则操作失败。

所以,如果直接删除用户表中的用户,如果其他表的外键在该表的值中不存在,是会删除失败的。所以我们要删除用户表之前,需要删除其他表外键与之关联的数据。

类似的还有很多,例如现在有一个数据库,数据库中有两个表: 

博客表:(博客id,博客内容)

评论表:(评论id,评论内容,所属博客id); 其中所属博客id来自于 博客id。

  要想删除博客,在这之前要先删除所属这博客的评论  。


上述代码用的是INSTEAD OF触发器,和ALTER触发器不同的是,ALTER触发器在(delete,insert,update)原来操作后执行。而INSTEAD OF 是代替原来操作,也就是说不执行原来的SQL语句。 

触发器还用到了临时表,常用临时表有两个,一个是inserted ,还有一个是deleted。当用户做增删改操作时,会把将要插入的数据放入inserted中,同理会把将要删除的数据放在deleted中。

在一个实例代码:有这样的一个功能,用户能够上传自己位置,不过要把原来的位置删除。换言之,就是更新位置信息的操作。(注:userLocat(phoneNum,Latitude,Longitude)).

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE TRIGGER  trigUserLocatInsertON  userLocatinstead of insert
AS 
BEGINdeclare @phonenum varchar(20)
declare @latitude float
declare @longitude float
select @phonenum=phoneNum,@latitude=Latitude,@longitude=Longitude from inserted
delete userLocat where phoneNum=@phonenum
insert into userLocat (Latitude,Longitude,phoneNum) values(@latitude,@longitude,@phonenum)
END
GO

当然用update也可以实现。上述触发器在userLocat中定义,当进行insert操作的时候触发

这篇关于SQLSever触发器建立的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745880

相关文章

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

【内网】ICMP出网ew+pingtunnel组合建立socks5隧道

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 通过环境搭建,满足以下条件: 攻击机模拟公网vps地址,WEB边界服务器(Windows Server 2008)模拟公司对外提供Web服务的机器,该机器可以通内网,同时向公网提供服务。内网同网段存在一台Windows内网服务

【IDEA】建立多个子模块依赖于一个父模块(maven)

第一步,建立父模块(在IDEA中就是工程) 第二步,选中父模块(也就是工程)右键New Module建立子模块 勾选创建模板原型并一般选择 maven-archetype-quickstart,当创建web模块时选择 maven-archetype-webapp 其他子模块都是类似这样创建~ packaging打包类型有: jar,默认类型warejbea

【2024全国大学生数学建模竞赛】B题 模型建立与求解(含代码与论文)

目录 1问题重述1.1问题背景1.2研究意义1.3具体问题 2总体分析3模型假设4符号说明(等四问全部更新完再写)5模型的建立与求解5.1问题一模型的建立与求解5.1.1问题的具体分析5.1.2模型的准备 目前B题第一问的详细求解过程以及对应论文部分已经完成! - 晚上7-8点之前第二问完成 - 明天中文之前全部写完 按照提交论文的格式进行撰写!完整版请看文章最后!

Oracle数据库(触发器、存储过程、函数、包)

一、触发器(trigger) 推荐练习文档: http://wenku.baidu.com/link?url=brtd9myO4XIaEjRPaRB0yWgV2_TfXmNxS6KKjB_avq7d0hPs3SknJdrs-JLtWe–H-f3q-I61HUxkcqqAFMC0z6Zf65QBbmFRB8TAlULmGS http://www.cnblogs.com/friends

【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程

我想观察UE4是怎么编译的,于是查阅官方文档,了解到UE4有一套自己的编译工具:UnrealBuildTool,简称UBT。关于UBT的官方文档参阅:虚幻编译工具。我想尝试自己手动建立一个使用UBT进行编译的空白工程。不过首先,先了解下UBT的编译流程中一些文件所扮演的角色 UBT的编译流程中一些文件所扮演的角色 模块 每个模块都由一个 .build.cs 文件声明,它存储在 Source

Flink实例(115):自定义时间和窗口的操作符(十四)窗口操作符(四)触发器(Triggers) (二)

Flink 中窗口是很重要的一个功能,而窗口又经常配合触发器一起使用。 Flink 自带的触发器大概有: CountTrigger: 指定条数触发ContinuousEventTimeTrigger:指定事件时间触发ContinuousProcessingTimeTrigger:指定处理时间触发ProcessingTimeTrigger: 默认触发器,窗口结束触发EventTime

Linux - Tcp连接建立和释放的三次握手四次挥手

一、TCP报文段首部格式         源端口/目的端口:各占2个字节,分别写入源端口和目的端口,端口是传输层与应用层的服务接口    序号:占4个字节,TCP连接中传送的数据流中每一个字节都有一个序号,序号字段指本报文段所发送的数据的第一个字节的序号    确认号:占4个字节,是期望收到对方下一个报文的第一个数据字节的序号    数据偏移:占4个字节,它指出TCP报文的数据距离TCP

Oracle19C触发器

触发器可以看作一种特殊的存储过程,它定义了一些在数据库相关事件(如INSERT、UPDATE、CREATE等事件)发生时应执行的“功能代码块”,通常用于管理复杂的完整性约束,或监控对表的修改,或通知其他程序,甚至可以实现对数据的审计功能。 1. 触发器简介 触发器是通过触发事件来执行的(存储过程的调用或执行是由用户或应用程序进行的)。能够引起触发器运行的操作就被称为触发事件,如执行DML

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间:2024年9月5日 18:00-2024年9月8日20:00 2 思路内容 2.1 往届比赛资料 【2022高教社杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案及代码实现(已经更新完毕) 【2022高教社杯数学建模】C题:古代玻璃制品的成分分析与鉴别 赛后总