我的第一个触发器练习

原创 2005年03月04日 13:53:00

表ExA如下:
CREATE TABLE ExA (
 id int IDENTITY (1, 1) NOT NULL ,
 status bit NULL ,
 primary key (id)
)
select * from ExA
id          status
----------- ------
4           1
6           1

 

表ExB如下:
CREATE TABLE ExB (
 id int IDENTITY (1, 1) NOT NULL ,
 Aid int NULL ,
 mark varchar (50)  NULL ,
 primary key (id),
 foreign key (Aid) references ExA On Delete Cascade On Update Cascade
)
select * from ExB
id          Aid         mark                                              
----------- ----------- --------------------------------------------------
76          4           test1
77          4           test2
78          4           test3
79          4           test4
84          6           test1
85          6           test2
86          6           test3
87          6           test4

ExA.id与ExB.Aid是一对多的关系。

现在要求,当ExB中删除记录时,检查表,若ExA的数据在ExB中没有找到对应的数据,则将ExA.Status设置为0。

触发器如下:
Alter Trigger trTestEx
On ExB
For Delete
As
Declare curDelete cursor for
 select Aid from Deleted group by Aid
Declare @intAid int
Open curDelete
Fetch Next from curDelete Into @intAid
while @@Fetch_Status=0
Begin
 if exists(select * from ExA where id=@intAid)
 Begin
  if not exists(select * from ExB where Aid=@intAid)
   Update ExA set status=0 where id=@intAid
 End
 Fetch Next from curDelete Into @intAid
End
Close curDelete
Deallocate curDelete
Go

Delete From ExB where Aid=4   --支持Delete From ExB where Aid in (4,6) 
结果如下:

select * from ExA
id          status
----------- ------
4           0
6           1
select * from ExB
id          Aid         mark                                              
----------- ----------- --------------------------------------------------
84          6           test1
85          6           test2
86          6           test3
87          6           test4

相关文章推荐

在DB2中创建第一个触发器

  • 2012年11月02日 10:53
  • 5KB
  • 下载

我的第一个oracle trigger 报错ora-04098:触发器无效且未通过重新验证

公司系统需要,临时需要我写一个触发器, 我简单的记录了一下我的第一个触发器的编写过程. 第一步,找部分参考资料,看懂大概的逻辑 :http://blog.csdn.NET/qingzhongren...

人生第一个触发器成功+第一存储过程+事务了。

在做快捷查询时,触发器如下啊。 向cargo2中的更新数据,令cargo1中的valid字段1 create trigger test1 before insert on cargo2 fo...
  • bonlog
  • bonlog
  • 2012年05月24日 12:44
  • 561

第一个VB程序练习

  • 2007年10月21日 09:15
  • 16KB
  • 下载

machine learning 第一个练习的代码

  • 2013年11月19日 12:46
  • 28KB
  • 下载

sqlserver的触发器练习

触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作。 下面直接上干货,创建insert触发器、delete触发器、DDL触发器和如何查看触发器定义 1....

对oracle当中子查询建表,merge操作,创建,修改,删除约束,创建使用触发器的复习练习

Sql代码 /** 对oracle当中子查询建表,merge操作,创建,修改,删除约束,创建使用触发器的复习练习**/  /**    本例子的作用是熟悉使用oracle当中的触发器:有两...

Sql 触发器练习

首先创建2个表! USE[TEST] IF OBJECT_ID('T_EMPLOYEE') IS NOT NULL DROP TABLE T_EMPLOYEE ELSE CREATE TAB...

sqlsever ,触发器的练习

 学生表,成绩表, --1、 删除xs表中birth字段的check约束,并建立insert类型的触发器, select *from xs --实现,如果插入的记录的birth字...

SQL Server 存储过程和触发器sql语句练习

SQL Server 存储过程和触发器sql语句练习
  • hoho_12
  • hoho_12
  • 2015年12月18日 22:25
  • 1315
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我的第一个触发器练习
举报原因:
原因补充:

(最多只允许输入30个字)