您的位置:首页 > 其它

如何利用存储过程删除有关系的几张表

2007-05-15 12:48 309 查看
当要删除有关系的几张表时,只删除其中的一张会出现严重的错误。因为几个表的数据是通过外键联系起来的,当删除主键表中的数据时,应该一起将子表对应的数据也删除。否则会引起混乱。

下面介绍一下方法(子查询)。

先看三张有关系的表



其中Modules表是Projects表的子表,TestDemands是Modules的子表

若要删除主表Projects表中的数据,必须将对应的Modules表和TestDemands表中的数据删除,而且要按从下至上的顺序

存储过程如下

--删除模块表

CREATE PROCEDURE dbo.TestManager_DeleteProject_Combination

@ProjectID int

AS

--删除测试需求表

DELETE

FROM

dbo.Module_TestManager_TestDemands

WHERE

dbo.Module_TestManager_TestDemands.MID

IN

(SELECT

dbo.Module_TestManager_Modules.MID

FROM

dbo.Module_TestManager_Modules

WHERE

dbo.Module_TestManager_Modules.ProjectID

IN

(SELECT dbo.Module_TestManager_Projects.ProjectID

FROM

dbo.Module_TestManager_Projects

WHERE

dbo.Module_TestManager_Projects.ProjectID=@ProjectID))

--删除模块表

DELETE

FROM

dbo.Module_TestManager_Modules

WHERE

dbo.Module_TestManager_Modules.ProjectID=@ProjectID

--删除项目表

DELETE

FROM

Module_TestManager_Projects

WHERE

ProjectID=@ProjectID

GO

注:由于SELECT

dbo.Module_TestManager_Modules.MID

FROM

dbo.Module_TestManager_Modules

WHERE

dbo.Module_TestManager_Modules.ProjectID

选出的是一张表,所以要用“IN”而不使用“=”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: