--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触发器实例(上)的更多相关文章

  1. SQL触发器实例讲解

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Inser ...

  2. SQL触发器实例

    SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分 ...

  3. SQL触发器实例(下)

    基本语法: Create Trigger [TriggerName] ON [TableName] FOR [Insert][,Delete][,Update] AS --触发器要执行的操作语句. G ...

  4. sqlserver 触发器实例代码

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...

  5. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  6. [SQL SERVER系列]存储过程,游标和触发器实例[原创]

    自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录 declare @UserID int ) ) declare @UnitFlag i ...

  7. PL/SQL之存储过程和触发器实例

    1.Oracle存储过程实例 /*不带任何参数存储过程(输出系统日期)*/ CREATE OR REPLACE PROCEDURE output_date IS BEGIN DBMS_OUTPUT.P ...

  8. SQL触发器、事物

    触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...

  9. SQL触发器、事务

    触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...

随机推荐

  1. 简单的Django实现图片上传,并存储进MySQL数据库 案例——小白

    目标:通过网页上传一张图片到Django后台,后台接收并存储进数据库 真是不容易!!这个案例的代码网上太乱,不适合我,自己摸索着写,终于成功了,记录一下,仅供自己参考,有的解释可能不对,自己明白就好, ...

  2. Duilib 控件类html富文本绘制

    转载:http://blog.csdn.net/wyansai/article/details/51088896 转载:http://blog.csdn.net/lixiang987654321/ar ...

  3. Django组件(三) Django之中间件

    中间件概述 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响到性 ...

  4. Linux系统编程之--守护进程的创建和详解【转】

    本文转载自:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终 ...

  5. POJ 3694 Network(并查集缩点 + 朴素的LCA + 无向图求桥)题解

    题意:给你一个无向图,有q次操作,每次连接两个点,问你每次操作后有几个桥 思路:我们先用tarjan求出所有的桥,同时我们可以用并查集缩点,fa表示缩点后的编号,还要记录每个节点父节点pre.我们知道 ...

  6. Spring Cloud微服务体系搭建

    前期架构设计图: 参考博文: Eureka相关: Eureka注册与发现(高可用注册中心.注册服务.Feign服务调用):https://blog.csdn.net/qq_32529383/artic ...

  7. java 监控工具 jconsole

    如图

  8. C++ 清空队列(queue)的几种方法

    C++中的queue自身是不支持clear操作的,但是双端队列deque是支持clear操作的. 方法一 直接用空的队列对象赋值 queue<int> q1; // process // ...

  9. Select2下拉框总结

    用了这么久的Select2插件,也该写篇文章总结总结.当初感觉Select2不是特别好用,但又找不到比它更好的下拉框插件. 在我的印象里Select2有2个版本,最新版本有一些新的特性,并且更新了一下 ...

  10. Varnish 一般是放在 Nginx 前面还是后面的?

    1.varnish官网有写. 如果用ssl前面肯定得有nginx. 如果没有ssl看你实际需求.可以varnish,然后nginx,然后app. 看怎么设计了. 2.Varnish 通常是在两种情况下 ...