如何删除关联SQL表中的行?

时间:2012-02-13 21:29:00

标签: sql sql-server tsql database-design stored-procedures

我想删除GlassesColor表中与Glasses表中的GlassesID相关联的行。 我想在存储过程中实现它。存储过程只从客户端获取一个参数,一个CollectionID。

以下是表格:

enter image description here

以下是表格内容的示例:

enter image description here

知道如何实现这个? 提前谢谢!

6 个答案:

答案 0 :(得分:3)

最简单的方法是使用DELETE的CASCADE选项定义FOREIGN KEYS。

http://msdn.microsoft.com/en-us/library/aa933119%28v=sql.80%29.aspx

我看到你已经定义了外键,所以你只需要确保它们有DELETE的CASCADE选项。

答案 1 :(得分:3)

手动删除会是这样的:

delete 
from GlassesColor 
where GlassesID in (select GlassesID from Glasses where CollectionID = 3)

但是,除非这是一次性清理,否则您应该开始指定外键级联规则,就像已经建议的其他答案一样。

答案 2 :(得分:2)

没有存储过程,请使用Constrains - > http://www.mssqlcity.com/Articles/General/using_constraints.htm OnDelete Cascade,所以当你删除眼镜中的行时,它也会以眼镜颜色删除。

答案 3 :(得分:2)

GlassesColor联接表的外键约束中,有on delete cascade。这意味着当删除主键引用记录时,相应的外键引用行也将被删除。

因此,您的GlassesColor表定义如下所示:

create table GlassesColor
(
    GlassesId int foreign key references Glasses(GlassesID) on delete cascade,
    .....
)
go

答案 4 :(得分:2)

我在MSSQL中使用了INFORMATION_SCHEMA来回答类似问题

SQL Server: drop table cascade equivalent?

答案 5 :(得分:2)

以下是在Microsoft SQL Server中执行此操作的最简单方法:创建外键约束时,将ON UPDATE CASCADE ON DELETE CASCADE添加到其定义中。我假设您希望更改GlassesID也能传播。 ;-)如果没有,那么你不需要“ON UPDATE CASCADE”。

示例:

ALTER TABLE
  [GlassesColor]
WITH CHECK ADD CONSTRAINT
  [FK_GlassesColor_GlassesID]
FOREIGN KEY
  ([glassesID]) REFERENCES [Glasses] ([glassesID])
ON UPDATE CASCADE ON DELETE CASCADE