SQL触发器实例(上)
- --1.) 创建测试用的表(testTable)
- if exists (select * from sysobjects where name='testTable')
- drop table testTable
- GO
- Create Table testTable
- (
- testField varchar(50)
- )
- select * from testTable
- --2.) 创建基于表(testTable)的触发器(testTrigger)
- IF EXISTS (Select name FROM sysobjects Where name = 'testTrigger' AND type = 'TR')
- Drop TRIGGER testTrigger
- GO
- Create Trigger testTrigger
- ON testTable
- for Insert,Delete,Update
- AS
- if exists(select * from inserted)
- if exists(select * from deleted)
- print '...更新'
- else
- print '...插入'
- else
- if exists(select * from deleted)
- print '...删除'
- Go
- --.) 操作testTable表,测试触发器testTrigger
- --分别执行Insert Into语句,Update语句,Delete语句,看看效果
- Insert Into testTable values ('testContent!')
- Update testTable Set testField = 'UpdateContent'
- Delete From testTable
- select * from testTable
- --用到的功能有:
- --1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
- --2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录,等等。
- --这时候可以用到触发器。对于需求1,创建一个Update触发器:
- Create Trigger truStudent
- On student --在Student表中创建触发器
- instead of Update --为什么事件触发
- As --事件触发后所要做的事情
- if Update(stuID)
- begin
- Update borrow
- Set stuID=i.stuID
- From borrow as br , Deleted as d ,Inserted as i --Deleted和Inserted临时表
- Where br.stuID=d.stuID
- end
- drop trigger truStudent
- UPDATE student set stuID='' WHERE stuID=''
- Create trigger trdStudent
- On Student
- instead of Delete
- As
- Delete Borrow
- From Borrow as br , Deleted as d Where br.StuID=d.stuID
- drop trigger trdStudent
- delete FROM student WHERE stuID=''
- disable trigger trdStudent on Student
- select * from book
- select * from borrow
- select * from student
- --创建触发器(对删除表的约束)
- create trigger droptabel
- on database
- for drop_table
- as
- print'删除表吗?'
- print'不能删除表'
- rollback transaction
- go
- drop table students
- disable trigger droptabel on database --关闭触发器
- enable trigger droptabel on database
- CREATE TABLE students --学生信息表
- (
- stuID CHAR(10) primary key, --学生编号
- stuName CHAR(10) NOT NULL , --学生名称
- major CHAR(50) NOT NULL --专业
- )
- GO
- CREATE TABLE borrowS --借书表
- (
- borrowID CHAR(10) primary key, --借书编号
- stuID CHAR(10) NOT NULL, --学生编号
- BID CHAR(10) NOT NULL,--图书编号
- T_time datetime NOT NULL, --借出日期
- B_time datetime --归还日期
- )
- GO
- SElect * from students
- select * from borrows
- Create Trigger truStudents
- On students --在Student表中创建触发器
- for Update --为什么事件触发
- As --事件触发后所要做的事情
- if Update(stuID)
- begin
- Update borrows
- Set stuID=i.stuID
- From borrows as br , Deleted as d ,Inserted as i --Deleted和Inserted临时表
- Where br.stuID=d.stuID
- end
- UPDATE studentS set stuID='' WHERE stuID=''
- Create trigger trStudent
- On Students
- for Delete
- As
- Delete borrows
- From borrows AS br , Deleted AS d
- Where br.stuID=d.stuID
- drop trigger trStudent
- delete from students where stuID=''
SQL触发器实例(上)的更多相关文章
- SQL触发器实例讲解
SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Inser ...
- SQL触发器实例
SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分 ...
- SQL触发器实例(下)
基本语法: Create Trigger [TriggerName] ON [TableName] FOR [Insert][,Delete][,Update] AS --触发器要执行的操作语句. G ...
- sqlserver 触发器实例代码
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
- [SQL SERVER系列]存储过程,游标和触发器实例[原创]
自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录 declare @UserID int ) ) declare @UnitFlag i ...
- PL/SQL之存储过程和触发器实例
1.Oracle存储过程实例 /*不带任何参数存储过程(输出系统日期)*/ CREATE OR REPLACE PROCEDURE output_date IS BEGIN DBMS_OUTPUT.P ...
- SQL触发器、事物
触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...
- SQL触发器、事务
触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...
随机推荐
- python 线程 进程 协程 学习
转载自大神博客:http://www.cnblogs.com/aylin/p/5601969.html 仅供学习使用···· python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和 ...
- windows 上安装redis和windows上redis与php扩展
1.下载redis压缩包(自己选择想要的版本,1,2地址任意选一个) 下载window版本地址1:https://github.com/dmajkic/redis/downloads 下载window ...
- 在linux桌面上显示图标
把应用程序的图标添加到桌面上 左图显示了把应用程序的图标添加到桌面上的两种方法,哪种更好看? 想要把应用程序图标添加到桌面上,请先确保已设置了在桌面上显示图标,方法是: 1.安装gnome-tweak ...
- 【入门详解】MyBatis入门基础详解
什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XM ...
- C++宏定义不受命名空间的约束
// xxx.h namespace A { #define xxx() xxxxx } // 在其他文件中,引入xxx.h文件,使用宏定义时,不需要加命名空间 // yyy.cpp #include ...
- SQLServer中round函数
---SQL四舍五入问题1: SELECT CAST('123.456' as decimal) ---123 将会得到 123(小数点后面的将会被省略掉). ---如果希望得到小数点后面的两位.则需 ...
- 《剑指offer》第四题(二维数组中的查找)
// 二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数,判断数组 ...
- notification后,程序应该如何响应
一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在PendingIntent中设置好的. 经常玩Android手机的应该都有印 ...
- 使用Fragment适应不同屏幕和分辨率
Fragment是Android3.0后增加的新控件,有点类似于Activity组件,也是用来承载各种View元素.Google增加这个 玩意的目的是为了平板电脑里面可以复用部分显示的View,只要写 ...
- table maker's delimma
table maker's delimma是计算机浮点数精度的一个问题. 浮点数的表示方式 计算机能表示的数字都是有理数,所有的有理数都可以归结为下面的模式:1.@@@ × 2#### 其中,@@@ ...