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 ...
随机推荐
- 更换 nodejs npm 镜像为 淘宝 镜像
淘宝npm镜像官方介绍文档:https://npm.taobao.org/ ,使用命令在这个官方文档里查询. 安装工具cnpm: $ npm install -g cnpm --registry=ht ...
- 更改 Centos 6 的 yum 源
1.查看当前使用的源: yum repolist all 阿里源网址,使用方法点右边的帮助可以看到:https://opsx.alibaba.com/mirror 2.更改源: 第一步:备份你的原镜像 ...
- 20145106《Java程序设计》第7周学习总结
教材学习内容总结 使用Lambda的特性可以去除重复的信息,以取得语法的简洁,增加程序代码的表达性.Lambda表达式本身是中性的,不代表任何类型的实例,同样的Lambda表达式,可用来表示不同目标类 ...
- 20145311王亦徐《网络对抗技术》MAL_逆向与Bof基础
20145311王亦徐<网络对抗技术>MAL_逆向与Bof基础 实践目标 运行一个可执行文件,通过逆向或者Bof技术执行原本不应该执行的代码片段采用的两种方法: 1.利用foo函数的Bof ...
- 20162311 编写Android程序测试查找排序算法
20162311 编写Android程序测试查找排序算法 一.设置图形界面 因为是测试查找和排序算法,所以先要有一个目标数组.为了得到一个目标数组,我设置一个EditText和一个Button来添加数 ...
- NOIP 华容道
描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的 ...
- HDU 5889 Barricade(最短路+最小割)
http://acm.hdu.edu.cn/showproblem.php?pid=5889 题意: 给出一个图,帝国将军位于1处,敌军位于n处,敌军会选择最短路到达1点.现在帝国将军要在路径上放置障 ...
- HDU 6143 Killer Names(容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=6143 题意: 用m个字母去取名字,名字分为前后两部分,各由n个字符组成,前后两部分不能出现相同字符,问合法的组成 ...
- HTTP 随笔
浏览器发送HTTP请求主要分为三部分请求行,Response Headers(响应头信息)和Request Headers(请求头信息). 请求行有分为三部分:请求方法,请求路径和请求协议 请求方法有 ...
- Educational Codeforces Round 1 E. Chocolate Bar dp
题目链接:http://codeforces.com/contest/598/problem/E E. Chocolate Bar time limit per test 2 seconds memo ...