--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. CF 316E3 Summer Homework(斐波那契矩阵+线段树)

    题目链接:http://codeforces.com/problemset/problem/316/E3 题意:一个数列A三种操作:(1)1 x y将x位置的数字修改为y:(2)2 x y求[x,y] ...

  2. How to force https on amazon elastic beanstalk

    假设您已在负载平衡器安全组中启用https,将SSL证书添加到负载平衡器,将443添加到负载平衡器转发的端口,并使用Route 53将您的域名指向Elastic Beanstalk环境(或等效DNS服 ...

  3. NOIP2018 退役记

    NOIP挂完,OI再见 AFO Day 0 早上的高铁,1点多到广州,2点多到酒店,下午就是颓颓颓,然后晚上随便刷了一下板子,反正PJ也没啥板子可以刷 就这样浪费了一天,我到底在干嘛 Day 1 早上 ...

  4. 初始 DQN 程序 所遇到的问题

    初始 DQN 程序 所遇到的问题 最近在看 DQN,但是想试试别人放出来的 code,但是发现,额,各种问题,在此记录,以备不时之需! 问题1. wangxiao@GTX980:~/Documents ...

  5. 如何插入sql数据

    原:http://blog.csdn.net/Weicleer/article/details/47608289

  6. 【网络知识】【1】http、tcp/udp、soap的区别

    一句话总结: soap信息可以通过http协议包装后通过tcp或udp传输 参考:https://zhidao.baidu.com/question/617706398106243452.html

  7. C++:为什么unique_ptr的Deleter是模板类型参数,而shared_ptr的Deleter不是?

    为什么unique_ptr的Deleter是模板类型参数,而shared_ptr的Deleter不是? template <class T, class D = default_delete&l ...

  8. go 修改字符串

    在Go中字符串是不可变的,例如下面的代码编译时会报错:cannot assign to s[] var s string = "hello" s[] = 'c' 但如果真的想要修改 ...

  9. java 基本数据类型及自动类型提升

    1.Java的8种基本数据类型及其所占空间大小: boolean  8bit/1byte       byte      8bit/1byte       char      16bit/2byte ...

  10. vmware 安装ubuntu

    点击自定义硬件 即将完毕 下面就是安装啦