无法创建FK约束

时间:2011-01-14 22:40:34

标签: sql sql-server sql-server-2008

我有两张桌子:

TableA
------
TableAID INT IDENTITY Primary Key
TableBID INT NULL

I add a unique constraint on TableBID
ALTER TABLE TableAID ADD CONSTRAINT xx UNIQUE ([TableBID])

TableB
------
TableBID INT IDENTITY Primary Key

现在当我删除TableA行时,我也需要删除TableB,所以我试图添加一个带有级联删除的FK

ALTER TABLE TableB ADD CONSTRAINT yy FOREIGN KEY (TableBID) 
REFERENCES TableA (TABLEBID) ON DELETE CASCADE

但是我收到了这个错误:

Msg 1788, Level 16, State 0, Line 1
Cascading foreign key 'yy' cannot be created where the referencing column 'TableB.TableBID' is an identity column.

3 个答案:

答案 0 :(得分:9)

TableB.TableBID不能同时是IDENTITY列(独立计算),同时也是另一个表中列的外键。

我认为你的关系已经逆转并且实际上想要:

ALTER TABLE TableA ADD CONSTRAINT yy FOREIGN KEY (TableBID) 
REFERENCES TableB (TABLEBID) ON DELETE CASCADE

答案 1 :(得分:0)

  

现在当我删除TableA行时,我也需要删除TableB,所以我试图添加一个带有级联删除的FK

此方案要求您以其他方式创建关系。 否则,在A中创建一个触发器,当A被删除时,它将删除B中的匹配记录。

  

当我切换表时,错误消失了,但我不应该在TableB上添加约束,因为我希望在删除TableA行时删除TableB行。

FK意味着主服务器是B,并且A中的一个或多个记录链接到它(在您的情况下,您已使用唯一密钥将其限制为一对一)。当删除主控时,级联删除会删除FK的子部分,因此删除B - >删除匹配的A,而不是相反。你需要一个触发器。

答案 2 :(得分:-1)

我删除了表格设计下的身份规范..然后它才有效