日期:2014-05-17  浏览次数:20575 次

如何创建触发器,限制删除或修改记录
有两个表 A, B
A 表含有字段 ID
B 表含有字段 A_ID(数据来源就是A的ID)
如何给A表创建一个触发器,当要删除或修改A表记录时,判别B表A_ID是否使用了A表的ID,如果使用了该ID,就不允许A表修改或删除该ID的记录。
我是菜鸟,望各位大佬帮帮。
谢谢!

------解决方案--------------------

create trigge dbo.a_U_b on dbo.a for update,delete
as
--update,delete
if exists(select 1 from b join deleted a on a.id=b.id)
begin
     rollback tran
     raiserror('不能修改,删除记录',16,1)
     return
end


------解决方案--------------------
引用:
create trigger dbo.trigger_a
on a
for delete,update
as
   rollback
go
是整个表处于只读状态。
我的意思是:
假定A表有记录:
1,‘xxx’
2,‘yyy’
B表有记录:
2,‘aaaa',’bbbb'
则A表的第2条记录不允许修改和删除(2-不允许修改,yyy-也不允许修改)
第1条记录则不限制。







if OBJECT_ID('b') is not null
   drop table b
go

if OBJECT_ID('a') is not null
   drop table a
go


create table a(id int primary key,v varchar(10) )

insert into a
select 1,'aa' union all
select 2,'111'


create table b(
id int ,a_id int ,vv varchar(10)
)

insert into b
values(2,1,'bb')
go


create trigger dbo.trigger_a
on a
for delete,update
as

if exists(select * 
          from deleted d 
          inner join b
                  on b.a_id= d.id )
   rollback
go


--不能删除
delete from a where id = 1
/*
消息 3609,级别 16,状态 1,第 1 行
事务在触发器中结束。批处理已中止。
*/


--不能修改
update a
set v = 'xxx'
where id= 1
/*
消息 3609,级别 16,状态 1,第 1 行
事务在触发器中结束。批处理已中止。
*/


--id 为2的可以修改,可以删除
update a
set v = 'xxx'
where id= 2

delete from a where id = 2

------解决方案--------------------

create table&nb