SQL Server 触发器

在这里插入图片描述

表名:属性表二

DML触发器

DELETE (AFTER)触发器

格式:

CREATE TRIGGER 触发器名
ON 表名
AFTER DELETE 
AS 
BEGIN
DECLARE @A(参数) INT 
SELECT @A=DELETED.列名 FROM DELETED
DELETE 表名
where  条件
END

例:

CREATE TRIGGER chufaqi
ON [dbo].[属性表二]
AFTER DELETE 
AS 
BEGIN
DECLARE @A INT 
SELECT @A=DELETED.ID FROM DELETED
DELETE 属性表 
where  id=@A
END

意思为如果删除id列的某一值,则会直接删除这一行的所有值
做DELETE 操作
在这里插入图片描述
执行SQL
在这里插入图片描述

INSTEAD OF 触发器

例:

CREATE TRIGGER chufaqi2
ON [dbo].[属性表二]
INSTEAD OF DELETE 
AS 
BEGIN 
DECLARE @B INT 
SELECT @B=COUNT(*) FROM DELETED 
IF @B>0
BEGIN
RAISERROR ('不能删除',10,1)
rollback transaction 
end
end

不允许进行删除操作的触发器
結果:
在这里插入图片描述

UPDATE 触发器

实例:

CREATE  TRIGGER trigger_update 
on   [dbo].[BAS]
after update 
as 
if update(ID)
begin 
update [dbo].[班级表]
set  ID=(SELECT ID FROM inserted)
WHERE  ID=(SELECT ID FROM deleted)
END

效果:如果更改了BAS表的ID,班级和BAS表的ID都会被修改
执行前的两个表:
BAS:
在这里插入图片描述
班級表:
在这里插入图片描述
执行sql语句:

UPDATE [dbo].[BAS]
SET ID=111 WHERE ID=1

在这里插入图片描述
在这里插入图片描述

触发器的删除

格式:

DROP TRIGGER 触发器名
INISERT 触发器

实例:如果没有与另一个表列里的内容相同的值,无法插入

CREATE TRIGGER chufaqi4
ON [dbo].[BAS]
AFTER INSERT 
AS
 BEGIN TRANSACTION/*事务*/
 IF EXISTS(SELECT * FROM INSERTED   c
 WHERE c.[name] not  in(SELECT [name] FROM  [dbo].[属性表]))
 BEGIN 
 RAISERROR ('ERROR',16,1)/*报错*/
 ROLLBACK TRANSACTION
 END
 ELSE 
 COMMIT TRANSACTION/*提交事务*/

在这里插入图片描述

DDL 触发器

防止表被修改或者删除

实例:

CREATE TRIGGER trigger_ddl1
on database 
for drop_table ,alter_table 
as 
print '不能修改'
rollback

测试:

drop table [dbo].[BAS]

結果:
在这里插入图片描述

删除DDL触发器

格式:

DROP TRIGGER 触发器名
ON DATABASE 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值