第十章触发器的创建与管理

10.1_触发器简介

触发器是一种特殊的存储过程,常常用于实现强制业务规则和数据完整性。触发器由SQL Server自动执行,不能由应用程序调用,这是它与存储过程不同的地方,便于保护数据库的完整性和完全性。

10.2_触发器的创建、修改、删除

10.2.1_触发器的创建

CREATE TRIGGER trigger_name
[WITH ENCRYPTION]--加密
ON table_name
{
   
   FOR | AFTER | INSTEAD OF} INSERT, UPDATE, DELETE
AS
--sql过程块

10.2.2_触发器的修改

ALTER TRIGGER trigger_name
[WITH ENCRYPTION]--加密
ON table_name
FOR INSERT, UPDATE, DELETE
AS
--sql过程块

10.2.3_触发器的删除

DROP TRIGGER trigger_name

10.2.4_触发器的创建、修改、删除举例

CREATE TRIGGER Company_attention
ON Company
WITH ENCRYPTION
FOR INSERT
AS
print '字符串'
ALTER TRIGGER Company_attention
ON Company
WITH ENCRYPTION
FOR INSERT
AS
print '字符串'
DROP TRIGGER Company_attention

10.3_instead of触发器

10.3.1_instead of触发器简介及举例 有疑问

instead of触发器作用:执行触发器中的内容,而禁止执行触发词触发器的sql语句

CREATE TRIGGER [CONTRACT_DELETE] ON [CONTRACT] 
INSTEAD OF DELETE--instead of类型 
AS
BEGIN
IF EXISTS
(SELECT Count(*) FROM ContractDetail 
WHERE ContractID IN (SELECT ContractID FROM Deleted))--如果这个结果不是0就说明有相关记录
--打印
PRINT ‘合同明细表中有相关记录,不能删除’
ELSE--否则就删除
DELETE FROM CONTRACT
WHERE CONTRACTID in (SELECT CONTRACTID FROM deleted)
END

再次删除不会再次触发这个触发器吗

10.4_inserted、deleted表

Inserted表
存放由insert 或update语句的执行而导致要加到该触发器作用的表中去的任何新行。


deleted表
存放由delete 或update语句的执行而导致要从被该触发器作用的表中删除的任何行。


inserted与deleted表中自带与操作的表同样的属性列

10.5_注意事项

SQL Server 允许创建的存储过程引用尚不存在的对象。在创建时,只进行语法检查。 CREATE TRIGGER
必须是批处理中的第一条语句,并且只能应用到一个表中。
触发器中不允许以下 Transact-SQL 语句:ALTER DATABASE 、CREATE DATABASE、 DISK INIT 、DISK RESIZE 、DROP DATABASE 、LOAD DATABASE 、LOAD LOG 、RECONFIGURE 、RESTORE DATABASE 、RESTORE LOG

猜你喜欢

转载自blog.csdn.net/qq_43907296/article/details/110495883