我如何'级联删除'在创建表之后

时间:2014-07-08 16:01:41

标签: sql sql-server foreign-key-relationship

在Sql Server中,我有一个包含4个FK关系的Company表:

Foreign Key Relationships

我需要删除特定列为空的某些公司。但我需要删除其他表中的所有相关记录。 在创建和设计这些表后,我该怎么做?'

我为Load关系尝试了这个,但是我收到了一个错误:

ALTER TABLE "Company"
ADD CONSTRAINT "FK_Company"
FOREIGN KEY ("Company")
REFERENCES "Load" ("Company")
ON DELETE CASCADE;

ERROR:
Msg 1769, Level 16, State 1, Line 1
Foreign key 'FK_Company' references invalid column 'Company' in referencing table 'Company'.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果这些约束不是ON DELETE CASCADE,那么很有可能这样做是有原因的。因此,除非你知道自己在做什么,否则我建议不要改变这一点。

而且,编写模拟级联的删除查询并不是很难:

DELETE FROM child_table WHERE parent_id IN
    (SELECT parent_id FROM parent_table WHERE attr = ?)

DELETE FROM parent_table WHERE attr = ?;

答案 1 :(得分:0)

您的Load表和其他表需要将公司表的键定义为外键。在此示例中,Load表的CompanyID列引用了Company表的CompanyID列。 CompanyID是Company表的主键。

ALTER TABLE dbo.Load ADD CONSTRAINT
FK_Load_Company FOREIGN KEY
(
CompanyID
) REFERENCES dbo.Company
(
CompanyID
) ON UPDATE  NO ACTION 
 ON DELETE  CASCADE