zjcxc(邹建)请进,请教一个触角器问题!!急急

twism 2004-05-05 10:05:28
请教一个问题:
数据库:ggxx,表yd的ID列与bm表的ID列应满足参照完整性规则:向yd表添加一个记录时,该记录的ID值在表bm中应存在.通过一触发器实现
(1)向yd表插入或修改一条记录时,通过触发器检查记录的ID值在bm表中是否存在,若不存在,则取消插入或修改

操作.


如何建立这个触角器?急,帮帮忙
...全文
53 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zjcxc 元老 2004-05-05
直接用外键约束更好.
  • 打赏
  • 举报
回复
zjcxc 元老 2004-05-05
create trigger tr_process on yd
for insert,update
as
if exists(select 1 from bm a where not exists(select 1 from inserted where id=a.id))
rollback tran
  • 打赏
  • 举报
回复
berylw 2004-05-05
你看看用这个办法是不是能适合你?

创建存储过程
-------------
create proc prc_insert_ta
@iid varchar(50)
as
if(exists(select iid from tb where iid=@iid))
begin
insert ta values(@iid)
end
-------------

测试--------
------------
create table ta
(
iid varchar(50) primary key
)
create table tb
(
iid varchar(50) primary key
)

insert tb values('a')--------插入TB中数据做测试用
----------------------

执行测试
exec prc_insert_ta 'b'
获得结果
select * from ta
------------
无任何值插入



执行测试
exec prc_insert_ta 'a'
获得结果
select * from ta
------------
a
  • 打赏
  • 举报
回复
zheninchangjiang 2004-05-05
这个可以通过外键约束来实现(如果BM表ID为主键)
alter table yd add constraint fk_bmid foreign key (id) references bm(id)
  • 打赏
  • 举报
回复
8992026 2004-05-05
有没有外键约束?

create trigger tr_yd
on yd
for insert,update
as
if exists (select 1 from inserted i where not exists ( select 1 from bm where id=i.id)

begin
ROLLBACK TRANSACTION
RAISERROR('违反规则',16,1)
return
end
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-05-05 10:05
社区公告
暂无公告