如何利用存储过程删除有关系的几张表
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”而不使用“=”。
下面介绍一下方法(子查询)。
先看三张有关系的表
其中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”而不使用“=”。
相关文章推荐
- 利用SQL语句创建、修改、执行、删除存储过程
- 存储过程函数中如何定义表变量,删除表变量内容
- 如何利用存储过程和触发器来管理数据库 (4)
- Oracle 利用存储过程 删除用户下所有表
- 利用sql批量删除表,存储过程。
- 如何从服务器上利用存储过程返回数据集
- Oracle在存储过程中,如何删除和创建表?
- 利用存储过程分步删除数据
- Oracle利用存储过程批量insert造数据和分批提交删除的例子
- 存储过程中如何利用游标分批提交
- 存储过程函数中如何定义表变量,删除表变量内容
- 如何利用存储过程和触发器来管理数据库 (1)
- SQL如何删除多余数据行的存储过程实例
- 如何使用集合的方法利用存储过程的结果集
- 如何利用存储过程和触发器来管理数据库 (2)
- postgresql 写存储过程传入的参数为字符串('4,5,6,8,9,10')个数不确定时,如何一次性删除
- 如何删除一个表中重复的记录? 、、游标,存储过程的使用
- 如何利用存储过程和触发器来管理数据库 (3)
- 如何利用存储过程和触发器来管理数据
- 如何利用存储过程插入更新IMAGE数据类型