我有一个表,我有一个外键约束,如下面
ALTER TABLE [dbo].[Element] WITH CHECK
ADD CONSTRAINT [FK_Element_Band]
FOREIGN KEY([BandID]) REFERENCES [dbo].[Band] ([BandID])
GO
ALTER TABLE [dbo].[Element] CHECK CONSTRAINT [FK_Element_Band]
GO
现在我正试图从带状表中删除一行
DELETE FROM Band
WHERE TypeID = 21 AND BandUpperLimit = 10000 AND PID = 61
但是我收到了一个引用约束错误:
DELETE语句与REFERENCE约束“FK_Element_Band”冲突。冲突发生在数据库“pricingModified”,表“dbo.Element”,列'BandID'。
所以如果我在Elements
表中有任何引用具有ID 21的Band
表的内容,那么就会发生这种情况,但自SQL以来情况并非如此
SELECT *
FROM Element
WHERE BandID = 21
什么都不返回。
有人可以告诉我为什么我无法从父表中删除行数据,即使子表中没有引用?
由于
答案 0 :(得分:1)
请检查此查询:
select b.*
from Element e
inner join Band b
on e.BandId = b.BandId
where b.TypeId = 21
and b.BandUpperLimit = 10000
and b.PID = 61
答案 1 :(得分:1)
只需在外键约束中指定ON DELETE CASCADE即可。然后,当您从Band表中删除一行时,它将自动删除Element表中的所有子记录。
ALTER TABLE [dbo].[Element] WITH CHECK
ADD CONSTRAINT [FK_Element_Band]
FOREIGN KEY([BandID]) REFERENCES [dbo].[Band] ([BandID]) ON DELETE CASCADE
GO
答案 2 :(得分:0)
create table <child_table_name>
(
_______,
_______,
([FOREIGN KEY column_name]) [size of FOREIGN KEY column] references [parent table(primary key column_name)] on delete cascade
)
使用此功能,您可以使用删除操作轻松删除fk的记录。
试试这个,如果成功,那就标记为正...