SqlServer的触发器

触发器是Sqlserver响应以下任意语句而自动执行的一天T-SQL语句。delete,insert,update.表和视图支持触发器。(但是临时表不支持)。

我们在哪些业务场景需要用到触发器呢?

1.每当订购一个产品时,都从库存数量中减去订购的数量。

2.每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写。

1.首先,创建触发器。触发器用create trigger语句创建。下面是一个简单的例子:

create trigger newproduct_trigger on products
after insert
as
select ‘product added‘

触发器定义为after insert,所以此触发器将在insert语句成功执行后执行。触发器按每个表每个事件每次地定义,因此每个表最多支持3个触发器(insert,update,delete各一个触发器)

2.删除触发器。我们用drop trigger语句删除一个触发器。如下所示:

drop trigger newproduct_trigger;

3.启用和禁用触发器,我们用disable trigger和enable trigger语句:

--禁用触发器
disable trigger newproduct_trigger on products;

--重新启用触发器
enable trigger newproduct_trigger on products;

4.我们如何确定这个表有没有触发器呢?我们可以使用内建的存储过程sp_helptrigger:

--sp_helptrigger取一个表名并返回触发器的一个列表。
SP_HELPTRIGGER products;

5.使用触发器。
   5.1  insert触发器

insert触发器在insert语句执行之后执行。在insert触发器代码内,可引用一个名为inserted的虚拟表,访问被插入的行。

--创建一个insert触发器,当插入一个新订单时,生成一个新订单号保存到order_num中
create trigger neworder_trigger on orders
after insert
as
select @@identity as order_num;

--为测试这个触发器,试着插入一下新行。
insert into orders(order_date,cust_id) values(GetDate(),10001)

--输出     order_num
--            20010

5.2  delete触发器
delete触发器在delete语句执行之后执行。在delete触发器代码内,可引用一个名为deleted的虚拟表,访问被删除的行。

--使用delete触发器保存将要被删除的行到一个存档表中
create trigger deleteorder_trigger on orders
after delete
as
begin
    insert into orders_archive(order_num,order_date,cust_id)  select order_num,order_date,cust_id from deleted;
end;

此触发器在从表orders中删除行时知行。它使用insert select语句保存deleted中的行到一个名为orders_achive的存档表中。

5.3 update触发器

update触发器在update语句执行之后执行。在update触发器代码中,你可以引用名为deleted的虚拟表访问以前的值,引用名为inserted的虚拟表访问新更新的值。

--下面的例子中保证州名缩写总是大写。
create trigger vendor_trigger on vendors
after insert,update
as
begin
    update vendors
    set vend_state=upper(vend_state)
    where vend_id in (select vend_id from inserted);
end;

此触发器在insert,update之后执行。每当行被插入或更新时,vend_state中的值都用upper(vend_state)替换。

时间: 2024-08-12 10:44:16

SqlServer的触发器的相关文章

SQLServer创建触发器,更新表

在SQLServer,触发器,插入.更新.删除状态: CREATE TRIGGER t_inms_alarms ON [PHS].[dbo].[AlarmCurrent] FOR INSERT, DELETE AS DECLARE @rows int SELECT @rows = @@rowcount IF @rows = 0 return --如果表是插入,则同步更新AlarmsMiddleTbl IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS

在SQLServer使用触发器实现数据完整性

1.实现数据完整性的手段 在sqlserver中,在服务器端实现数据完整性主要有两种手段:一种是在创建表时定义数据完整性,主要分为:实体完整性.域完整性.和级联参照完整性:实现的手段是创建主键约束.唯一键约束.检查约束.默认值约束和各种级联完整性约束.另一种是通过编写触发器语句来实现,通过定义触发条件和编写触发后执行语句,来实现对数据表操作的各种约束. 2.触发器的概念 触发器是一种特殊的存储过程.通常用于实现强制业务规则和数据完整性.触发器是通过事件触发而由系统自动执行.主要体现在它在插入.删

[转帖]SQLSERVER 使用触发器实现 禁用sa用户 在非本机登录

原贴地址: https://blog.csdn.net/reblue520/article/details/51580102 具体的方法为: 创建一个触发器 CREATE TRIGGER forbiddensa ON ALL SERVER WITH EXECUTE AS 'sa' FOR LOGON AS BEGIN --选择sa用户进行限制: IF ORIGINAL_LOGIN()= 'sa' --允许sa在本机登录"" AND (SELECT EVENTDATA().value('

sqlserver的触发器练习实例

触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作. 下面直接上干货,创建insert触发器.delete触发器.DDL触发器和如何查看触发器定义 1.创建三个表学生表.班级表.课程表 create database student_score GO --在数据库中创建三个表学生表.班级表.课程表的结构 use student_score GO create table student ( stu_id char(8) primary key, stu_nam

SqlServer之触发器

1.触发器之理论: 触发器(Trigger)是一种特殊类型的存储过程,是在用户对某一种表的数据进行UPDATE.INSERT 和 DELETE 操作时被触发执行的一段程序.触发器有助于强制引用完整性,以便在添加.更新或删除表中的行时保留表之间已定义的关系. 2.触发器工作原理: ① 触发器的名称.② 触发器中进行的操作.③ 触发器操作的执行过程. 3.创建触发器: 可以通过 CREATE TRIGGER 语句建立触发器,其语法格式为: CREATE TRIGGER trigger_name ON

sql server触发器实现插入时操作另一张表

以前都是也得mysql,现在写sqlserver的触发器,感觉改动还是蛮大的 1.定义变量 #在mysql中变量直接这么定义就可以了 SET @VALUE = "111"; #在sql server中 declare @count int; #并赋值 set @count =0; #如果是查询,必须这么些 select @count = count(*) from WQ_MNINF_D_REAL where [email protected]; 2.判断 在mysql中,if判断的格式

MYSQL,DB2,SQLSERVER数据库不同点浅探(一)

简单地比较一下MYSQL,DB2,SQLSERVER数据库设计不同点,为日后看MYSQL源代码先打打底,今天先比较数据库对象吧: 1.DB2上关于表有一个表空间的概念,简单地说, 表空间是数据库系统中数据库逻辑结构与操作系统物理结构之间建立映射的重要存储结构,一般来说一个表空间对应一个表.DB2在表空间上分配表空间对应表的一切物理属性,比如首次分配大小,扩展大小,页面每页初始空闲空间,空闲页面占总页面百分比等.因此,DB2上的系统DBA对表的操作更多是基于表空间上.比如因为表上的删改查不可避免地

sql学习--update

两种修改形式 第一种:静态插入 1 update #famousjaycess set jc='johnny cash',occupation='Singer/songwriter',becamefamous=1955,notes='began career selling ...balabala' 2 where jc='johnny ca' 第二种: 1 --注意别名和on后边的表连接不要写错 2 update f set jc='johnny cash',occupation='Singe

SqlServer——触发器

一:触发器基本知识  触发器是一种特殊的存储过程,但没有接口(输入输出参数),触发器是引发它们的事务的一部分,因为SqlServer自动将引发它们的SQL语句和触发器作为一个隐式事务,因此当触发器正确执行后,事务才认为是完整的,触发器也可已在触发器内部通过 rollback tran 来回滚事务,当触发的SQL语句是隐式事务时,只回滚引发触发器的SQL语句和触发器:是显式事务时,将撤销从最外层 begin tran 开始的所有操作.所以触发器通常用来实现对表实施复杂的完整性约束和强制业务规则,它