我有两张桌子:
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.
答案 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)
我删除了表格设计下的身份规范..然后它才有效