使用主键删除 table 中的行,并使用外键删除不同 table 中的相关行
Deleting row in table with primary key and related rows in different table with foreign key
我有一个 Web 应用程序,它连接到具有多个 table 的数据库。
出于测试目的,我需要删除 table 中的一行。我正在使用以下行:
delete from EventsTable where Name = 'John's Party'
但是,当 运行 时,我收到以下错误消息:
The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.People_dbo.EventsTable_EventId". The conflict occurred in database "PlannerDatabase", table "dbo.People", column 'EventId'.
我认为这是因为外键被绑定到 EventsTable 中的主键,但我的问题是:
有没有什么方法可以用尽可能少的 SQL 代码从 EventsTable 中删除 "John's Party" 以及其余 table 中与该派对相关的所有行?
我正在使用 SQL Server Management Studio 2012。
这可以通过在 table.
中添加一个 On Delete Cascade
触发器来完成,而无需代码本身
您可以通过执行来查看对您的 table 的所有引用
EXEC sp_fkeys 'EventsTable'
然后您可以像这样创建级联删除:
ALTER TABLE dbo.People
DROP CONSTRAINT FK_dbo.People_dbo.EventsTable_EventId -- or whatever it's called
ALTER TABLE dbo.People
ADD CONSTRAINT FK_T1_T2_Cascade
FOREIGN KEY (EventId) REFERENCES dbo.EventsTable(EventId) ON DELETE CASCADE
我有一个 Web 应用程序,它连接到具有多个 table 的数据库。
出于测试目的,我需要删除 table 中的一行。我正在使用以下行:
delete from EventsTable where Name = 'John's Party'
但是,当 运行 时,我收到以下错误消息:
The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.People_dbo.EventsTable_EventId". The conflict occurred in database "PlannerDatabase", table "dbo.People", column 'EventId'.
我认为这是因为外键被绑定到 EventsTable 中的主键,但我的问题是:
有没有什么方法可以用尽可能少的 SQL 代码从 EventsTable 中删除 "John's Party" 以及其余 table 中与该派对相关的所有行?
我正在使用 SQL Server Management Studio 2012。
这可以通过在 table.
中添加一个On Delete Cascade
触发器来完成,而无需代码本身
您可以通过执行来查看对您的 table 的所有引用
EXEC sp_fkeys 'EventsTable'
然后您可以像这样创建级联删除:
ALTER TABLE dbo.People
DROP CONSTRAINT FK_dbo.People_dbo.EventsTable_EventId -- or whatever it's called
ALTER TABLE dbo.People
ADD CONSTRAINT FK_T1_T2_Cascade
FOREIGN KEY (EventId) REFERENCES dbo.EventsTable(EventId) ON DELETE CASCADE