关联的表在delete触发器中怎么互相取值?
大概是这样一个需求:
有两个关联的表,外键级联删除。当主表删除某记录时,我需要在delete触发器中同时取到主表删除记录的某列的值和外键关联表删除记录的某列的值。
但是,经过反复试验,无论把这个触发器创建在主表上,还是关联表上,它们都只能在 deleted 中取到自己被删除的值,而无法通过表本身取到对方的值(记录不存在)。
请问,有没有什么办法,可以同时取到两个表中被删除记录的值? 实在是没有思路啊,能指点指点么,拜托拜托
[解决办法]
有没有什么办法,可以同时取到两个表中被删除记录的值? 实在是没有思路啊,能指点指点么
--->使用存储 过程吧
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
--创建主表
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
/*
idvidvv
1a1www
*/