【问题标题】:Cascading delete rows from multiple tables in SQL级联删除SQL中多个表的行
【发布时间】:2014-05-26 14:13:02
【问题描述】:
我有两个结构如下的表:
人
类
还有一些数据:
人
1 name1
2 name2
3 name3
类
1 1 3
2 1 1
3 1 2
4 2 1
Class 表可以包含与Person 中的一行相关的多行。来自Class 表的PersonId 是Person 表中Id 的外键。我想用Id 1 删除与Person 相关的数据,因此使用一个查询从Class 中删除3 行,并从Person 中删除1 行。
如何在 SQL 中做到这一点?
【问题讨论】:
标签:
sql
sql-server
cascading-deletes
【解决方案1】:
试试这个:
CREATE TABLE [dbo].[Class](
[Id] [int] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NULL,
[Sequence] [int] NULL,
CONSTRAINT [PK_Class] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Person] Script Date: 26-05-2014 07:54:26 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Person](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Person] [nchar](10) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Class] WITH CHECK ADD CONSTRAINT [FK_Class_Person] FOREIGN KEY([PersonId])
REFERENCES [dbo].[Person] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Class] CHECK CONSTRAINT [FK_Class_Person]
GO