数据库系列之T-SQL(触发器)

什么是触发器

触发器是一种特殊的存储过程,只能由事件驱动调用,而无法直接调用。

触发器有什么用

当对数据库的相关对象(数据库、表、视图)进行某些特定的操作时,数据库会自动调用相应的触发器。无需再执行增删改或存储过程的操作,让程序更自动化。

触发器怎么用

3.1 触发器的触发方式
SQL Server 按触发器被激活的时机可分为后触发和替代触发两种触发方式
引起触发器执行的修改语句若违反了某种约束,后触发方式不会激活触发器,替代触发方式会激活触发器
(1)后触发
当引起触发器执行的修改语句执行,并通过各种约束检查后,才执行触发器,这种触发方式称为后触发
创建这种触发器使用AFTER或FOR关键字
后触发只能创建在表上,而不能创建在视图上
(2) 替代触发
当执行可引起触发器执行的修改语句时,停止该修改语句的执行,仅执行其触发器,这种触发方式称为替代触发
创建这种触发器使用INSTEAD OF关键字
替代触发可创建在表上,也可以创建在视图上
3.2 激活触发器时的临时表
每个触发器被激活时,系统都为它自动创建两个临时表
INSERTED表:需要添加或更新后的数据
DELETED表:需要删除或更新前的数据
这两个表的结构与被激活触发器的表结构相同
触发器执行完成后,这两个表将被自动删除
3.3 示例一:替代触发

Create trigger tri_dropCustomer on customers
Instead of delete
As
    delete from orders
    where customerid=(
          select customerid from deleted)

    delete from customers
    where customerid=(
          select customerid from deleted)
go

3.4 示例二:后触发

create trigger tri_updateOrderdate on Orders
after update
as
    declare @oldOrderdate datetime
    declare @newOrderdate datetime
    select @oldOrderdate=orderdate from deleted
    select @newOrderdate=orderdate from inserted
    if @oldOrderdate<>@newOrderdate
    begin
        print ‘订单日期不能修改‘
        rollback transaction
    end
go

时间: 2024-10-11 04:00:50

数据库系列之T-SQL(触发器)的相关文章

SQL 触发器-如何查看当前数据库中有哪些触发器

在查询分析器中运行: use 数据库名goselect * from sysobjects where xtype='TR' sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象.在 name 一列,我们可以看到触发器名称. SQL 触发器-创建一个简单的触发器 SQL 触发器-重命名触发器 SQL 触发器-删除触发器 SQL 触发器-触发器更多语法 SQL 触发器-如何查看某个触发器的内容 SQL 触发器-多个触发器 SQL 触发器-递归.嵌套触发器 SQ

Oracle数据库之开发PL/SQL子程序和包

Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据库中,以便共享. 过程和函数均存储在数据库中,并通过参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据. 1. 存储过程概念 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中.经过第一次编译后

SQL触发器学习

? 简介 触发器是一种特殊类型的存储过程.触发器分为: DML( 数据操纵语言 Data Manipulation Language)触发器:数据库中表或视图的数据更改时触发,包括insert,update,delete语句 DDL(数据定义语言 Data Definition Language)触发器:表或索引中的create.alter.drop语句. 登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发. ? 优劣 可以强制执行业务规则: Microsoft SQL Serve

Azure SqlDatabase 系列之2--Azure SQL Database 与 SQL Server 的比较

(内容整理自msdn Azure Sql Database主题部分内容) 与 SQL Server 相似,Azure SQL Database 为基于 Transact-SQL 的数据库访问公开表格格式数据流 (TDS) 接口.这允许你的数据库应用程序采用与它们使用 SQL Server 相同的方式来使用 Azure SQL Database. 与 SQL Server 管理不同,Azure SQL Database 从物理管理中提取逻辑管理:你继续管理数据库.登录名.用户和角色,但 Micro

Sql触发器调用外部程序实现数据同步

首先创建两个数据库:SyncA是数据源,SyncB是对SyncA进行同步的数据库. 在SyncA和SyncB中分别创建Source表和Target表,实际业务中,两张表的结构大多不相同.     然后创建一个类库的项目:MySync(注意项目的版本,Sql08不支持的.net 4.0及更高版本) 下面是同步程序代码: using System; using System.Data; using System.Data.Sql; using Microsoft.SqlServer.Server;

SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应的GIS专业理论知识. 5.其他相关知识. SQL Serve

数据库复习10——PL/SQL

数据库复习 CH10 PL/SQL 10.1 PL/SQL简介 PL/SQL是Oracle对SQL的过程化的扩展,PL/SQL可以实现SQL相关的过程化程序,并且能够以存储过程和函数的方式让一段SQL业务逻辑驻留在SQL服务器中,以便减少客户机计算任务并减少网络I/O 10.2 PL/SQL编程基础 (1)简介 PL/SQL编程框架为: DECLARE <Variable List> BEGIN <Extented SQL Execution> EXCEPTION <Exce

【牛腩视频】之SQL触发器

之前在学习机房管理系统.net版的时候,已经写过了关于数据库的操作,但是现在开始学习牛腩,才发现之前自己理解的太浅显,很多东西看似好像会了,不去实际操作一下,不把代码从头到尾敲出来,到头来还是不会,所以,这篇文章就是总结如何从头到尾,创建一个sql触发器的教程.以下均以sql2008r2为例: 第一步:创建触发器 找到自己要创建触发器的表-触发器-新建触发器. 第二步:填写所需要信息 点击新建触发器以后,就会出现数据库为我们创建的一些初始化的代码,如下: 我们需要写的地方就是从CREATE TR

4. SQL -- 触发器

触发器 触发器是一类特殊的存储过程.它与表的关系密切,用于保护表中的数据,当有操作影响到触发器保护的数据时,触发器自动执行,例如使用触发器实现多个表间数据的一致性. 一般情况下,对表数据的操作有插入,修改,删除,因而维护数据的触发器也可分为三类: INSERT,UPDATE和DELETE 一.使用SQL命令创建触发器 语法格式如下: Create trigger tigger_name on {table|view}             --指定触发器的名称和操作对象 [with encry