关联的表在delete触发器中怎么互相取值?

xloveme 2013-10-26 11:39:03
大概是这样一个需求:

有两个关联的表,外键级联删除。当主表删除某记录时,我需要在delete触发器中同时取到主表删除记录的某列的值和外键关联表删除记录的某列的值。

但是,经过反复试验,无论把这个触发器创建在主表上,还是关联表上,它们都只能在 deleted 中取到自己被删除的值,而无法通过表本身取到对方的值(记录不存在)。

请问,有没有什么办法,可以同时取到两个表中被删除记录的值? 实在是没有思路啊,能指点指点么,拜托拜托
...全文
118 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xloveme 2013-10-26
  • 打赏
  • 举报
回复
delete 触发器 INSERTED表似乎没管用吧
--小F-- 2013-10-26
  • 打赏
  • 举报
回复
一个表不是有INSERTED吗?关联一下另外一张表就应该能查到了。
LongRui888 2013-10-26
  • 打赏
  • 举报
回复
我做了一个实验,通过2005版本及以后版本提供的output子句,来保存删除的记录,你看看是不是这样:



--创建主表
create table t1(id int primary key,v varchar(10))

--创建附表,级联删除
create table t2
(
idd int,
id int foreign key references t1(id) on delete cascade,
vv varchar(20)
)

insert into t1
select 1,'a' union all
select 2,'b' 

insert into t2
select 1,1,'www' union all
select 1,2,'csdn'


--创建存储删除的t1表的字段
create table temp_t1_delete(id int,v varchar(10))

--创建存储删除的t2表的字段
create table temp_t2_delete(id int,vv varchar(20))  
go

--创建表t2的delete触发器
create trigger dbo.trigger_t2_delete 
on dbo.t2
for delete
as
begin
   insert into temp_t2_delete(id,vv)
   select id,vv
   from deleted
end
go


--删除主表记录,自动把删除的主表记录,保存在temp_t1_deletei表中  
delete from t1  
output deleted.id,            --引用所有字段deleted.*  
       deleted.v into temp_t1_delete
where id = 1 



--查询已删除的记录
select *
from temp_t1_delete t1
left join temp_t2_delete t2
       on t1.id = t2.id
/*
id	v	id	vv
1	a	1	www
*/
LongRui888 2013-10-26
  • 打赏
  • 举报
回复
你用的是2005及以后的版本吗
Andy__Huang 2013-10-26
  • 打赏
  • 举报
回复
为何有些人喜欢用触发器呢?做数据库这么久我基本不会用触发器,为什么呢?因为让一个来接你的工作时,如果他不知道有触发器,就知道有些数据摸名其妙的少了,或多了,或发生变化了?触发器上看去简化了,但实际上使用了触发器对性能也有一定的影响
Andy__Huang 2013-10-26
  • 打赏
  • 举报
回复
有没有什么办法,可以同时取到两个表中被删除记录的值? 实在是没有思路啊,能指点指点么 --->使用存储 过程吧

create proc proc_del
@Key varchar(50)
as
set nocount on 
declare @mainID int ,@fkeyID int

--先查询
select @mainID=ID from  主表 where 主键=@Key
select ID as fkeyID
into #temp
from 外键表
where fkey=@mainID

--再删除
delete from 外键表 where fkey=@mainID
delete from  主表 where 主键=@Key

select @mainID 
select * from #temp

go

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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