级联删除触发器问题

wcq1987wang 2011-01-23 04:48:46
三个表 UserInfo存放人员的基本信息 主要相关字段 ID 身份证号,specialize 专业,其中一个人可能有多个专业,逗号隔开。
于是,另建一表将多专业分多行存放。为多专业表,ID,和专业两列
还有一个表 为统计表,统计人数信息,为UserInfo和多专业表结合后的数量。
UserInfo中有delete触发器,触发时delete from 多专业 where ID=''
并减少统计表中的人数。多专业表中也有一个delete触发器,删除时减少统计表中的数据
单独删除多专业表时,触发器能执行,UserInfo表级联删除时确无法触发多专业表的触发器,请高手指点
...全文
129 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
顶顶大乌龟。
老大啊,年终不发奖金啊。

楼主,将表结构,关联关系罗列一下,具体问题具体分析啊。
wcq1987wang 2011-01-24
  • 打赏
  • 举报
回复
直接在程序中删除多专业表数据了 多谢大家
表中没有建立别的关系
dawugui 2011-01-23
  • 打赏
  • 举报
回复
最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
如果有多表,表之间如何关联?


发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
叶子 2011-01-23
  • 打赏
  • 举报
回复
UserInfo表级联删除时确无法触发多专业表的触发器?

你这个级联删除是怎么个删除方式?
叶子 2011-01-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wcq1987wang 的回复:]
UserInfo中的
delete from MoreSpecialize where M_id=@pid
删除多专业表中的数据
[/Quote]
直接这样删除,理论上触发器是一定触发的。
wcq1987wang 2011-01-23
  • 打赏
  • 举报
回复
UserInfo中的
delete from MoreSpecialize where M_id=@pid
删除多专业表中的数据
wcq1987wang 2011-01-23
  • 打赏
  • 举报
回复
多专业中的触发器

CREATE TRIGGER Trig_delete_ComTog_fromMore
ON [dbo].[MoreSpecialize]
after DELETE
AS

declare @remark varchar(10)
declare @cid int
declare @spec varchar(10)
declare @mid varchar(18)
---------定义游标----------------------------------
declare Cursor_delete_MoreSpecialize cursor
for select M_specialize,M_remark, M_id from Deleted
---------打开游标---------------------------------
open Cursor_delete_MoreSpecialize
fetch next from Cursor_delete_MoreSpecialize
into @spec,@remark,@mid

while @@fetch_status=0
begin
update CompanyTogather set G_reRegister=G_reRegister-1 where G_c_id=@cid and G_specialize=@spec

fetch next from Cursor_delete_MoreSpecialize into @spec,@remark,@mid
wcq1987wang 2011-01-23
  • 打赏
  • 举报
回复
UserInfo中的触发器
CREATE TRIGGER Trig_delete_comtogather
ON dbo.UserInfo
FOR DELETE
AS

declare @remark varchar(10)
declare @cid int
declare @spec varchar(10)
declare @pid varchar(18)
---------定义游标----------------------------------
declare Cursor_delete_UserInfo cursor
for select I_specialize,I_remark,I_company, I_Pid from Deleted
---------打开游标---------------------------------
open Cursor_delete_UserInfo
---------获取游标的下一行-----------------
fetch next from Cursor_delete_UserInfo
---------使变量获取当前行的专业,状态,企业编号---------------
into @spec,@remark,@cid,@pid
while @@fetch_status=0
begin
if (len( @spec)<3 )
begin
--具体操作
end
else
delete from MoreSpecialize where M_id=@pid
---------获取游标的下一行-----------------
fetch next from Cursor_delete_UserInfo
---------使变量获取当前行的专业,状态,企业编号---------------
into @spec,@remark,@cid,@pid
end
-------------------关闭游标---------------------
close Cursor_delete_UserInfo
-------------------释放游标---------------------
deallocate Cursor_delete_UserInfo
叶子 2011-01-23
  • 打赏
  • 举报
回复
触发器是针对表的

如果你这个表是联合查询作为条件,删除另外一个表中的数据是不能触发的。

下载代码方式:https://pan.quark.cn/s/ef6a0480725f ### SQL Server 触发器构建级联删除机制在数据库维护中,触发器被视为一种特殊的存储程序,其设计目的是在响应特定事件(例如数据插入、更新或删除)时自动运行。本文将系统阐述如何在 SQL Server 平台上构建一个触发器,以达成级联删除的操作目标。#### 一、触发器概述触发器是一种由 SQL Server 提供的机制,它允许用户设定当特定数据操作(如 INSERT、UPDATE 或 DELETE)发生时应当执行的行为。触发器可用于维护数据完整性、监控数据变更或实施复杂的业务规则。它们对于保障数据的一致性和安全性具有关键作用。#### 二、级联删除的应用情境级联删除指的是在主表中的记录被移除时,自动清空与之关联的子表中所有对应的记录。此类需求常见于存在层级关联的数据表中,例如:- **产品分类数据表**与**具体产品数据表**之间的关联:当移除某个分类时,需要同时移除该分类下的所有产品。- **部门信息表**与**员工信息表**的关联:若某个部门被解散,则该部门下的所有员工信息也需被清除。#### 三、级联删除的构建途径通常情况下,数据库管理系统通过外键约束支持级联删除。然而,在某些情况下,可能由于历史遗留因素或其他原因,无法直接应用外键约束。这种情况下,可以通过开发触发器来手动实现该功能。#### 四、触发器实现级联删除的详细流程假设存在两个数据表:`Category` 和 `Product`。其中`Category` 表存储产品分类信息,`Product` 表则记录具体的产品信息。`Category` 表与 `Product` 表形成一对多的关联关系,即每个分类...

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧