如何在SQL SERVER 7.0中实现级联更新和组联删除(30分在线等)

youhuai 2003-08-24 11:43:39
本人使用SQL SERVER 2000时,关联表间可实现级联更新和级联删除,现欲在SQL Server7.0中实现,开始时写了一些触发器,可是因为表的关系较为复杂,有些触发器在执行时提示不能对多行进行操作,于是改写触发器,在级联操作时,逐行更新或删除子表内容,但是同时又发现这种操作的效率低得可怜,求教高手,有没有其它办法实现这一功能?望各位高手不吝赐教!
...全文
69 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
youhuai 2003-08-24
  • 打赏
  • 举报
回复
小黑兄:老大,问题给你看一下吧:
某医院新来一住院患者(患者资料表中插入一条数据),当医生为他开据了各种单据(增加了处方信息)后,住院管理处发现为其分配错了住院号,现想修改其住院号,则该患者的单据上的住院号也须一同修改,这时我们是不能删除单据内容的
happydreamer 2003-08-24
  • 打赏
  • 举报
回复

CREATE TRIGGER 名21 ON dbo.tabMain
FOR update
AS

insert into tabSlave
select * from tabmain where 编号 in (select 编号 from inserted)

delete tabSlave
where 编号 not in (select 编号 from inserted)
youhuai 2003-08-24
  • 打赏
  • 举报
回复
小黑兄:我要修的内容就是那个'编号'呀,当主表的主键被修改了,我要想让从表的内容跟着改变怎么办?
happydreamer 2003-08-24
  • 打赏
  • 举报
回复
应该可以的啊


create table tabmain
( 列 varchar(10),
编号 int)

create table tabSlave
( 列 varchar(10),
编号 int)

go

insert into tabmain select 'aaa',1
insert into tabmain select 'cc',2

insert into tabSlave select 'aaa',1


CREATE TRIGGER 名2 ON dbo.tabMain
FOR update
AS
update tabSlave set 列=aa.列 from inserted aa where aa.编号=tabSlave.编号

go

update tabmain
set 列='bbb'
where 编号=1


select * from tabslave

你的表结构是怎样的?
youhuai 2003-08-24
  • 打赏
  • 举报
回复
小黑兄:我试了您的update方法,没有成功
youhuai 2003-08-24
  • 打赏
  • 举报
回复
z5wjz:您的方法在SQL Server 2000中没问题,但SQL Server7中没有该功能
z5wjz 2003-08-24
  • 打赏
  • 举报
回复
如果约束能满足你的功能要求的话就用约束好了
你可以用企业管理器打开你的数据库-->数据库关系图-->右击新建关系图-->添加你的表-->在表与表之间建立外部关键字-->右击关联(那条线),选择属性-->设置级联更新或级联删除.

也可以用查询分析器来设置外键,同时指定cascade选项就可以了.
youhuai 2003-08-24
  • 打赏
  • 举报
回复
等会儿,我试一下
happydreamer 2003-08-24
  • 打赏
  • 举报
回复
CREATE TRIGGER 名1 ON dbo.tabMain
FOR INSERT
AS
insert db2..tabSlave select * from inserted

CREATE TRIGGER 名2 ON dbo.tabMain
FOR update
AS
update db2..tabSlave set 列=aa.列 from inserted aa where aa.编号=db2..tabSlave.编号


CREATE TRIGGER 名3 ON dbo.tabMain
FOR delete
AS
delete db2..tabSlave where 编号 in (select 编号 from deleted)
youhuai 2003-08-24
  • 打赏
  • 举报
回复
还有没有更好的方法?在线等(50)分
youhuai 2003-08-24
  • 打赏
  • 举报
回复
小黑兄,不行我把表的基本形式给你:
患者资料表(住院号,姓名,性别,入院时间)
处方表(处方号,住院号,开方医生,日期)
现在我说的意思是患者资料表中的住院号被修改了,我想修改处方表中对应的记录,你的方法是把处方中的对应记录删了,这个恐怕不行.
youhuai 2003-08-24
  • 打赏
  • 举报
回复
小黑兄:你是把患者资料给我存处方表里了,我处方表里原来对应的数据没了
happydreamer 2003-08-24
  • 打赏
  • 举报
回复

insert into tabSlave
select * from tabmain where 编号 in (select 编号 from inserted)
就是保存原来的数据啊
happydreamer 2003-08-24
  • 打赏
  • 举报
回复

CREATE TRIGGER 名2 ON dbo.tabMain
FOR update
AS

if not exists( select * from tabslave where 编号 in (select 编号 from inserted))

insert into tabSlave
select * from tabmain where 编号 in (select 编号 from inserted)

delete tabSlave
where 编号 not in (select 编号 from inserted)


update tabSlave set 列=aa.列 from inserted aa where aa.编号=tabSlave.编号

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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