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

如何删除关联SQL表中的行?,sql,sql-server,tsql,database-design,stored-procedures,Sql,Sql Server,Tsql,Database Design,Stored Procedures,我想删除GlassesColor表中与GlassesID关联的行。 我想在存储过程中实现这一点。存储过程只从客户端获取一个参数,即CollectionID 下表如下: 以下是内容表的示例: 你知道我该怎么做吗? 提前谢谢你 最简单的方法是使用用于删除的级联选项定义外键 我看到您已经定义了外键,所以您只需要确保它们具有用于删除的级联选项。在没有存储过程的情况下,使用Constrains->OnDelete CASCADE,这样当您删除眼镜中的行时,它也将以眼镜颜色删除。在您的GlasseCo

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

下表如下:

以下是内容表的示例:

你知道我该怎么做吗?
提前谢谢你

最简单的方法是使用用于删除的级联选项定义外键


我看到您已经定义了外键,所以您只需要确保它们具有用于删除的级联选项。

在没有存储过程的情况下,使用Constrains->OnDelete CASCADE,这样当您删除眼镜中的行时,它也将以眼镜颜色删除。

在您的
GlasseColor
联接表的外键约束中,在删除级联时使用
。这意味着删除主键引用记录时,相应的外键引用行也将被删除

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

create table GlassesColor
(
    GlassesId int foreign key references Glasses(GlassesID) on delete cascade,
    .....
)
go
delete 
from GlassesColor 
where GlassesID in (select GlassesID from Glasses where CollectionID = 3)

手动删除类似以下内容:

create table GlassesColor
(
    GlassesId int foreign key references Glasses(GlassesID) on delete cascade,
    .....
)
go
delete 
from GlassesColor 
where GlassesID in (select GlassesID from Glasses where CollectionID = 3)

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

我在MSSQL中使用信息模式时回答了类似的问题


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

例如:

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

+1给大家!!!我们都同意它应该在外键约束的DELETE CASCADE上!:-):-):-):-)