触发器 更新添加删除

合集下载

触发器的作用

触发器的作用

触发器的作⽤触发器触发器(trigger)是个特殊的存储过程,它的执⾏不是由程序调⽤,也不是⼿⼯启动,⽽是由个事件来触发,⽐如当对⼀个表进⾏操作(insert,delete, update)时就会激活它执⾏。

触发器经常⽤于加强数据的完整性约束和业务规则等。

触发器可以从 DBA_TRIGGERS,USER_TRIGGERS 数据字典中查到。

触发器可以查询其他表,⽽且可以包含复杂的 SQL 语句。

它们主要⽤于强制服从复杂的业务规则或要求。

例如,您可以根据客户当前的帐户状态,控制是否允许插⼊新订单。

触发器也可⽤于强制引⽤完整性,以便在多个表中添加、更新或删除⾏时,保留在这些表之间所定义的关系。

然⽽,强制引⽤完整性的最好⽅法是在相关表中定义主键和外键约束。

如果使⽤数据库关系图,则可以在表之间创建关系以⾃动创建外键约束。

⼀触发器介绍触发器是⼀种特殊的存储过程,它在插⼊,删除或修改特定表中的数据时触发执⾏,它⽐数据库本⾝标准的功能有更精细和更复杂的数据控制能⼒。

数据库触发器有以下的作⽤:* 安全性。

可以基于数据库的值使⽤户具有操作数据库的某种权利。

# 可以基于时间限制⽤户的操作,例如不允许下班后和节假⽇修改数据库数据。

# 可以基于数据库中的数据限制⽤户的操作,例如不允许股票的价格的升幅⼀次超过10%。

* 审计。

可以跟踪⽤户对数据库的操作。

# 审计⽤户操作数据库的语句。

# 把⽤户对数据库的更新写⼊审计表。

* 实现复杂的数据完整性规则。

# 实现⾮标准的数据完整性检查和约束。

触发器可产⽣⽐规则更为复杂的限制。

与规则不同,触发器可以引⽤列或数据库对象。

例如,触发器可回退任何企图吃进超过⾃⼰保证⾦的期货。

# 提供可变的缺省值。

* 实现复杂的⾮标准的数据库相关完整性规则。

触发器可以对数据库中相关的表进⾏连环更新。

例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的⾏。

# 在修改或删除时级联修改或删除其它表中的与之匹配的⾏。

第10章_触发器

第10章_触发器

第10章 触发器
CREATE TRIGGER TR_insertOrderDetails ON [dbo].[OrderDetails] FOR INSERT OrderDetails表上创建一个插入类型的触发器 AS BEGIN TR_insertOrderDetails,当在OrderDetails表中插入记录 declare @orderid int,@pid char(6),@quantity int 时,自动计算产品的总价格,并将销售员信息和总价 declare @price money 格更新到销售员业绩表TotalSales表中。 declare @sid char(3)
第10章 触发器
创建触发器时需指定: 创建触发器时需指定: 触发器名称。 在其上定义触发器的表。 触发器将何时激发。 激活触发器的数据修改语句。有效选项为 INSERT、 UPDATE 或 DELETE。多个数据修改语句可激活同一 个触发器。 执行触发操作的编程语句。
第10章 触发器
10.2.1 使用 使用SQL-Server企业管理器创建触发器 企业管理器创建触发器
CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] }] sql_statement [ ...n ] } }

数据库应用基础第八章触发器

数据库应用基础第八章触发器

AS
指定对标内某字段作增加
或修改操作时触发器材起
作用
IF UPDATE(column_name)
[{and|or} UPDATE(column_name)…]
sql_statesments
定义触发器被触
发后,将执行的 数据库操作
13
8.2.1 INSERT触发器
例:在pubs库的authors表上创建 my_trigger1触发器,该触发器被操 作INSERT所触发
35
36
2. 使用系统表 例:用系统表sysobjects查看数据 库pubs上的所有触发器的相关信息
USE pubs SELECT name from sysobjects WHERE type='TR' go
37
8.3使用触发器
8.3.1 使用触发器强制数据完整性 约束和触发器都可以用来实施数据 完整性,但两者各有优势
33
还可使用系统存储过程 sp_helptrigger来查看某特定 表上存在的触发器的某些信息
EXEC sp_helptrigger <tablename>
34
例:用系统存储过程sp_helptrigger 查看表authors上存在的所有触发器 的相关信息
USE pubs EXEC sp_helptrigger authors go
23
IF UPDATE(au_lname) BEGIN raiserror('Unauthorized!',10,1) rollback transaction END
不使用INSTEAD OF而 是通过rollback
transaction子句恢 复原来的数据的方法 来实现字段不被修改

sql查询触发器语句

sql查询触发器语句

sql查询触发器语句SQL触发器是一种特殊的数据库对象,它可以在特定的数据库操作(例如插入、更新、删除)发生时自动执行一些预定义的动作。

触发器可以用于实现复杂的业务逻辑和数据完整性约束。

下面列举了10个常见的SQL触发器语句:1. 在员工表上创建触发器,当有新员工加入时,自动在工资表中插入一条新记录:```sqlCREATE TRIGGER insert_employeeAFTER INSERT ON employeesFOR EACH ROWBEGININSERT INTO salaries (employee_id, salary) VALUES (NEW.employee_id, 0);END;```2. 在订单表上创建触发器,当订单状态更新为已发货时,自动更新库存表中对应商品的数量:```sqlCREATE TRIGGER update_inventoryAFTER UPDATE ON ordersFOR EACH ROWBEGINIF NEW.status = '已发货' THENUPDATE inventory SET quantity = quantity - NEW.quantity WHERE product_id = NEW.product_id;END IF;END;```3. 在学生表上创建触发器,当有新学生加入时,自动更新班级表中的学生人数:```sqlCREATE TRIGGER update_class_sizeAFTER INSERT ON studentsFOR EACH ROWBEGINUPDATE classes SET size = size + 1 WHERE class_id = NEW.class_id;END;```4. 在商品表上创建触发器,当商品数量低于阈值时,自动发送库存警报邮件:```sqlCREATE TRIGGER send_inventory_alertAFTER UPDATE ON productsFOR EACH ROWBEGINIF NEW.quantity < 10 THEN-- 发送邮件的逻辑END IF;END;```5. 在订单表上创建触发器,当订单被删除时,自动将对应的商品数量加回库存:```sqlCREATE TRIGGER restore_inventoryAFTER DELETE ON ordersFOR EACH ROWBEGINUPDATE inventory SET quantity = quantity + OLD.quantity WHERE product_id = OLD.product_id;END;```6. 在员工表上创建触发器,当员工的工资被更新时,自动记录工资变动历史:```sqlCREATE TRIGGER log_salary_changeAFTER UPDATE ON employeesFOR EACH ROWBEGININSERT INTO salary_history (employee_id, old_salary, new_salary, change_date) VALUES (NEW.employee_id, OLD.salary, NEW.salary, NOW());END;```7. 在订单表上创建触发器,当有新订单完成支付时,自动更新销售统计表中的数据:```sqlCREATE TRIGGER update_sales_statsAFTER INSERT ON ordersFOR EACH ROWBEGINIF NEW.status = '已支付' THENUPDATE sales_stats SET total_sales = total_sales +NEW.total_amount, order_count = order_count + 1;END IF;END;```8. 在学生表上创建触发器,当学生的成绩被更新时,自动计算并更新班级的平均成绩:```sqlCREATE TRIGGER update_class_avg_scoreAFTER UPDATE ON studentsFOR EACH ROWBEGINUPDATE classes SET avg_score = (SELECT AVG(score) FROM students WHERE class_id = NEW.class_id) WHERE class_id = NEW.class_id;END;```9. 在商品表上创建触发器,当商品被删除时,自动更新订单表中的商品信息:```sqlCREATE TRIGGER update_order_productAFTER DELETE ON productsFOR EACH ROWBEGINUPDATE orders SET product_id = NULL WHERE product_id = OLD.product_id;END;```10. 在员工表上创建触发器,当员工的状态从在职变为离职时,自动将该员工从项目表中移除:```sqlCREATE TRIGGER remove_employee_from_projectAFTER UPDATE ON employeesFOR EACH ROWBEGINIF NEW.status = '离职' THENDELETE FROM projects WHERE employee_id = NEW.employee_id;END IF;END;```以上是10个常见的SQL触发器语句的示例,它们展示了触发器的灵活应用,可以帮助我们实现复杂的业务逻辑和数据完整性约束。

navicat 写 触发器

navicat 写 触发器

navicat 写触发器Navicat是一款功能强大的数据库管理工具,可以帮助用户方便地管理和操作数据库。

在Navicat中编写触发器是非常常见的操作,通过编写触发器,可以在数据库中的表上定义一些特定的动作,比如在插入、删除或更新数据时自动触发一些操作。

下面我将详细介绍如何在Navicat中编写触发器。

首先,我们需要先打开Navicat并连接到我们所需管理的数据库。

进入数据库之后,选择要进行操作的表,右键点击表名,选择“设计表”,即可进入设计表的界面。

在设计表的界面中,我们可以看到一个名为“触发器”的选项卡,点击该选项卡后,可以看到已经定义好的触发器列表,如果还没有定义触发器,则列表为空。

点击下方的“添加”按钮,即可开始编写新的触发器。

在编写触发器的过程中,我们需要填写几个关键的部分:名称、事件、触发时间、触发动作和触发语句。

首先是名称,名称可以根据自己的需求进行设定,但是要注意名称的唯一性。

接下来是事件,事件分为插入、删除和更新三种情况,我们可以根据需求选择合适的事件。

然后是触发时间,触发时间可以选择“之前”、“之后”和“代替”三种情况。

选择“之前”表示在事件发生之前触发触发器,选择“之后”表示在事件发生之后触发触发器,选择“代替”表示在事件发生之前代替事件。

接着是触发动作,触发动作可以选择“每行”和“批量”两种情况。

选择“每行”表示对每一行数据都执行触发器中的触发语句,选择“批量”表示对整个事件的数据集合执行一次触发器中的触发语句。

最后是触发语句,触发语句就是我们要在触发器中执行的动作。

触发语句可以是一条SQL语句,比如插入、删除、更新数据等操作,也可以是一段存储过程或者自定义的函数。

在编写触发语句时,我们可以使用SQL语句和一些内置的变量。

在SQL语句中,可以使用insert、delete和update语句来操作数据。

在触发器中,可以使用OLD和NEW关键字来引用旧数据和新数据。

例如,可以使用NEW.column_name来引用插入或更新操作中的新数据,使用OLD.column_name来引用更新或删除操作中的旧数据。

DB2开发系列之四——触发器

DB2开发系列之四——触发器

DB2开发系列之四——触发器1、触发器类型1)BEFORE 触发器:在对表插⼊或更新之前执⾏该触发器,允许使⽤CALL和SIGNAL SQL 语句;2)BEFORE DELETE 触发器:在删除操作之前执⾏该触发器;3)AFTER 触发器:在更新、插⼊或删除操作之后执⾏。

该触发器⽤于更新反映表间关系和⼀致性的其他表中的数据,还⽤于确保数据完整性。

AFTER 触发器通常⽤于在特定情况下向⽤户⽣成报警;4)INSTEAD OF 触发器:该触发器⽀持对不⽀持插⼊、更新和删除操作的视图执⾏这些操作;2、创建触发器所需的权限1)使⽤触发器的模式ID必须拥有以下权限之⼀:i)对定义 BEFORE 或 AFTER 触发器的表拥有 ALTER 权限;ii)对定义 INSTEAD OF 触发器的视图拥有 CONTROL 权限;iiI)对定义 INSTEAD OF 触发器的视图拥有所有权;iv)对定义触发器的表或视图的模式拥有 ALTERIN 权限;v)SYSADM 或 DBADM 授权;2)以及以下任意⼀种权限:i)IMPLICIT_SCHEMA 数据库授权(如果触发器的隐式或显式模式名称不存在);ii)对模式的 CREATEIN 权限(如果触发器的模式名称引⽤现有的模式);3)假定授权 ID 没有 SYSADM 和 DBADM 权限并且触发器存在,此 ID 必须拥有以下所有权限:i)对定义触发器的表拥有 SELECT 权限 — ⽤于转换变量和/或表;ii)对在触发的操作条件中引⽤的任意表或视图的 SELECT 权限;iii)调⽤触发的指定 SQL 语句所需的权限;3、创建触发器语句1)语法.-NO CASCADE-.>>-CREATE TRIGGER--trigger-name--+-+------------+--BEFORE-+----->+-AFTER------------------+'-INSTEAD OF-------------'>--+-INSERT--------------------------+--ON--+-table-name-+------>+-DELETE--------------------------+ '-view-name--''-UPDATE--+---------------------+-'| .-,-----------. || V | |'-OF----column-name-+-'>--+------------------------------------------------------------------+-->| .-------------------------------------------------. || V (1) (2) .-AS-. | |'-REFERENCING------------------+-OLD--+----+--correlation-name-+-+-'| .-AS-. |+-NEW--+----+--correlation-name-+| .-AS-. |+-OLD TABLE--+----+--identifier-+| .-AS-. |'-NEW TABLE--+----+--identifier-'>--+-FOR EACH ROW--------------+--| triggered-action |--------->| (3) |'--------FOR EACH STATEMENT-'triggered-action|--+-------------------------------------+---------------------->| (4) |'--------WHEN--(--search-condition--)-'2)触发器有三个主要组件:i)触发器事件;ii)触发器条件;iii)触发器操作;3)⽰例:i)简单的 AFTER INSERT 触发器CREATE TRIGGER new_empAFTER INSERT ON employeeREFERENCING NEW AS nFOR EACH ROWINSERT INTO audit_emp VALUES (n.empno, 'Insert',0.0, current user, current timestamp)ii)简单的 AFTER DELETE 触发器CREATE TRIGGER purge_empAFTER DELETE ON employeeREFERENCING OLD AS oFOR EACH ROWINSERT INTO audit_emp VALUES (o.empno, 'Delete',0.0, current user, current timestamp)iii)简单的 AFTER UPDATE 触发器CREATE TRIGGER update_empAFTER UPDATE OF salary ON employeeREFERENCING OLD AS o NEW AS nFOR EACH ROWWHEN (n.salary <> o.salry)INSERT INTO audit_emp VALUES (o.empno,'Update',n.salary,current user, current timestamp) iv)简单的 BEFORE UPDATE 触发器CREATE TRIGGER update_bempBEFORE UPDATE ON employeeREFERENCING OLD AS o NEW AS nFOR EACH ROWWHEN (n.salary = 60000.00)SET n.salary = 75000.00)4、触发器的⾼级⽤法1)INSTEAD OF 触发器--⽰例CREATE TABLE "DB2INST1"."EMPLOYEES"("EMPNO" CHAR(6) NOT NULL ,"FIRSTNME" VARCHAR(12) NOT NULL ,"LASTNAME" VARCHAR(15) NOT NULL ,"PHONENO" CHAR(4) ,"SALARY" DECIMAL(9,2))CREATE VIEW employeev ASSELECT empno, firstnme, lastname, phonenoFROM employeesCREATE TRIGGER new_emp1INSTEAD OF INSERT ON employeevREFERENCING NEW AS nFOR EACH ROWINSERT INTO employees VALUES (n.empno, n.firstnme, stname, n.phoneno, 0)2)⽤触发器处理 XML 数据--⽰例CREATE TRIGGER new_orderBEFORE INSERT ON purchaseorderREFERENCING NEW AS NFOR EACH ROWSET (n.porder) = xmlvalidate(n.porderACCORDING TOXMLSCHEMA URI '/order.xsd')3)使⽤ SQL PL 语句扩展触发器主体i)语法General Syntax Diagram for CREATE TRIGGER cont.SQL-procedure-statement|--+-CALL----------------------------------------------+--------|+-Compound SQL (Dynamic)----------------------------++-FOR-----------------------------------------------++-+-----------------------------------+--fullselect-+| | .-,-----------------------. | || | V | | || '-WITH----common-table-expression-+-' |+-GET DIAGNOSTICS-----------------------------------++-IF------------------------------------------------++-INSERT--------------------------------------------++-ITERATE-------------------------------------------++-LEAVE---------------------------------------------++-MERGE---------------------------------------------++-searched-delete-----------------------------------++-searched-update-----------------------------------++-SET Variable--------------------------------------++-SIGNAL--------------------------------------------+'-WHILE---------------------------------------------'ii)从触发器中调⽤存储过程CREATE PROCEDURE write_audit( IN p_empno CHAR(6),IN p_txt CHAR(6),IN p_salary DECIMAL(9,2),IN p_user CHAR(8),IN p_curtime TIMESTAMP )BEGININSERT INTO audit_emp VALUES ( p_empno, p_txt, p_salary, p_user, p_curtime ) ENDCREATE TRIGGER new_empAFTER INSERT ON employeeREFERENCING NEW AS nFOR EACH ROWCALL write_audit( n.empno, 'Insert', 0.0, current user, current timestamp)iii)使⽤ SQL PL 的 BEFORE INSERT 触发器CREATE TRIGGER business_rulesBEFORE INSERT ON empprojactREFERENCING NEW AS nFOR EACH ROWBEGIN ATOMIC-- Business Rule One (Project ending date Can't be NULL)IF (n.emendate IS NULL) THENSET n.emendate = CURRENT date;END IF;-- Business Rule Two (Project ending date Can't end in last month of the year)IF (n.emendate BETWEEN '2009-12-01' AND '2009-12-31') THENSIGNAL SQLSTATE '90000'SET MESSAGE_TEXT = 'Business Rule violation - 90000';END IF;END。

oracle触发器update写法

oracle触发器update写法Oracle据库管理系统中,触发器是一种广泛使用的特殊存储过程,它能够检测数据库中特定发生的事件,当事件发生时,触发器就会执行相应的动作。

触发器可以检测各种数据库操作,例如,用户对表的数据插入、删除和修改,实现数据的自动更新。

今天的文章主要讨论Oracle触发器update写法。

在Oracle数据库中,要使用触发器,首先需要创建触发器。

要创建一个触发器,你需要使用CREATE TRIGGER语句,它有以下几个参数:触发器名称,触发器类型,触发时间,表和触发器要执行的SQL语句。

一旦你创建好了触发器,它就会在触发器指定的时间范围内,检测触发器拥有的表,触发器所定义的事件并触发触发器所定义的动作,在表数据发生变化的时候进行update写法的操作。

在Oracle数据库中,要使用update写法来实现触发器,需要使用update statement,其语句格式如下:UPDATE名 SET段名称=值 WHERE件;UPDATE名 SET段名称=新值,字段名称=新值 WHERE件;UPDATE名 SET(字段1,字段2...)=(值1,值2...) WHERE件; UPDATE名 SET段名称=(SELECT ... FROM ...) WHERE件;在实际使用中,根据业务需求,可以根据不同的情况,结合各种update statement,来构造适合的触发器,来实现不同的目的。

其次,触发器还可以使用trigger statement来实现update写法,具体的代码如下:CREATE OR REPLACE TRIGGER发器名AFTER UPDATE OF段1,字段2,... ON名FOR EACH ROWBEGINUPDATE名SET段1=新值1,字段2=新值2,...WHERE件;END;另外,也可以使用SQL函数来实现触发器update写法,其代码如下:CREATE OR REPLACE TRIGGER发器名AFTER UPDATE OF段1,字段2,... ON名FOR EACH ROWBEGINUPDATE名SET段1=函数1(参数1,参数2,...),字段2=函数2(参数1,参数2,...),...WHERE件;END;同样,根据业务需求,可以根据不同的情况,结合各种SQL函数,来构造适合的触发器,来实现不同的目的。

Oracle触发器操作


AS
SELECT * FROM Users
WHERE u_Name='amy';

(2)创建行级触发器

CREATE OR REPLACE TRIGGER tr_DeleteUser2 AFTER DELETE
2020/10/15 Or acle 数 据库 管理 与 应用 实例 教 程
课堂案例2—使用PL/SQL管理触发器
案例完成步骤-创建触发器
添加标 【例2-4】通过临时表将Users表中删除的记录进行临时保存(行级触发器)。
(1)创建行级触发器的测试表 CREATE TABLE userdel
题文字
建议课时:8课时
2020/10/15 Or acle 数 据库 管理 与 应用 实例 教 程
9.1 触发器概述
触发器简介 触发器是一种特殊的存储过程,它与数据表紧密联系,用于保护表中的 数据,当一个定义了特定类型触发器的基表执行插入、修改或删除表中 数据的操作时,将自动触发触发器中定义的操作,以实现数据的一致性 和完整性。 触发器拥有比数据库本身标准的功能更精细和更复杂的数据控制能力。 触发器具有以下的作用: (1)在安全性方面,触发器可以基于数据库的值使用户具有操作数据 库的某种权利。 (2)在审计方面,触发器可以跟踪用户对数据库的操作。 (3)实现复杂的数据完整性规则。 (4)实现复杂的非标准的数据库相关完整性规则。触发器可以对数据 库中相关的表进行连环更新。 (5)同步实时地复制表中的数据。 (6)自动计算数据值,如果数据的值达到了一定的要求,则进行特定 的处理。例如,如果商品的数量低于5,则立即给管理人员发送库存报 警信息。

WHO VARCHAR2(30),

触发器Tigger

一触发器介绍触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。

数据库触发器有以下的作用:# 安全性。

可以基于数据库的值使用户具有操作数据库的某种权利。

# 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。

# 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。

# 审计。

可以跟踪用户对数据库的操作。

# 审计用户操作数据库的语句。

# 把用户对数据库的更新写入审计表。

# 实现复杂的数据完整性规则。

# 实现非标准的数据完整性检查和约束。

触发器可产生比规则更为复杂的限制。

与规则不同,触发器可以引用列或数据库对象。

例如,触发器可回退任何企图吃进超过自己保证金的期货。

# 提供可变的缺省值。

# 实现复杂的非标准的数据库相关完整性规则。

触发器可以对数据库中相关的表进行连环更新。

例如,在auths表author_code列上的删除触发器可导致相应删除在其它表中的与之匹配的行。

# 在修改或删除时级联修改或删除其它表中的与之匹配的行。

# 在修改或删除时把其它表中的与之匹配的行设成NULL值。

# 在修改或删除时把其它表中的与之匹配的行级联设成缺省值。

# 触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。

当插入一个与其主健不匹配的外部键时,这种触发器会起作用。

例如,可以在 books.author_code 列上生成一个插入触发器,如果新值与auths.author_code列中的某值不匹配时,插入被回退。

# 同步实时地复制表中的数据。

#自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。

例如,如果公司的帐号上的资金低于5万元则立即给财务人员发送警告数据。

二 ORACLE 触发器的语法及其作用:ORACLE产生数据库触发器的语法为:create [or replace] trigger 触发器名触发时间触发事件on 表名[for each row]pl/sql 语句其中:触发器名:触发器对象的名称。

SQL Sever 2008触发器


[ NOT FOR REPLICATION ]
AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] }] sql_statement [ ...n ] } }
第11章 触发器
trigger_name:是触发器的名称 。 Table | view:是在其上执行触发器的表或视图 。
第11章 触发器
deleted 表和 inserted 表 deleted 表用于存储 DELETE 和 UPDATE 语句所影 响的行的备份。在执行 DELETE 或 UPDATE 语句时, 行从基本表中删除,并转移到 deleted 表中。 deleted 表和基本表通常没有相同的行。
inserted 表用于存储 INSERT 和 UPDATE 语句所影响 的行的备份。在一个插入或更新事务处理中,新建行 被同时添加到 inserted 表和基本表中。inserted表 中的行是基本表中新行的备份。
AFTER:指定触发器只有在触发 SQL 语句中指定的所 有操作都已成功执行后才激发。如果仅指定 FOR 关键 字,则 AFTER 是默认设置。 INSTEAD OF:指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。
AS:是触发器要执行的操作。
sql_statement:是触发器的条件和操作。
sp_help sp_helptext sp_depends sp_helptrigger
第11章 触发器
11.3.2 修改触发器
1.使用企业管理器修改触发器的正文 – 在详细信息窗格中,右击将在其上创建触发器的表, 指向“所有任务”菜单,然后单击“管理触发器”命 令。在“名称”中框中选择触发器的名称。 – 在“文本”框中更改触发器的文本。用 CTRL+TAB 键来缩进触发器的文本。 若要检查语法,单击“检查语法”命令。 –单击“确定”按钮,即可关闭该对话框,成功修改触 发器。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用触发器操作表1(添加,更新,删除) 同步实现表2的操作
if object_id('TABLE_1') is not null drop table TABLE_1
CREATE TABLE TABLE_1
(
ID INT primary key,
Name1 nchar(10),
Name2 nchar(10)
)
if object_id('TABLE_2') is not null drop table TABLE_2
CREATE TABLE TABLE_2
(
ID INT primary key,
Name1 nchar(10),
Name2 nchar(10)
)

INSERT INTO Table_1 VALUES(1,'adsd','Chi')
INSERT INTO Table_2 VALUES(1,'Lei','Chi')
INSERT INTO Table_2 VALUES(2,'Alex','Chi')

create trigger tr_info on TABLE_2
for insert,update,delete
as
begin
if exists(select 1 from inserted) and not exists(select 1 from deleted)--insert触发器
begin
insert into Table_1 select * from inserted
end
else if exists(select 1 from inserted) and exists(select 1 from deleted)--update触发器

begin
update b1
set b1.Name1=U.Name1,b1.Name2=U.Name2
from Table_1 b1,deleted U
where b1.ID=U.ID
end
else
begin
delete Table_1 where ID=(select ID from deleted)
end
end

--插入测试
INSERT INTO Table_2 VALUES(3,'huguo','Chi')
select * from TABLE_1

ID Name1 Name2
----------- ---------- ----------
1 adsd Chi
2 Alex Chi
3 huguo Chi

(3 行受影响)
--删除测试
delete from Table_2 where ID=3

ID Name1 Name2
----------- ---------- ----------
1 adsd Chi
2 Alex Chi

(2 行受影响)
--更新测试

select * from Table_2
update Table_2 set Name1='ALex2' where ID=2
ID Name1 Name2
----------- ---------- ----------
1 adsd Chi
2 ALex2 Chi

相关文档
最新文档