Sql-Server-2005

無法添加外鍵,因為它們存在 但它們不存在!

  • November 18, 2014

我有一個難題。我正在重新設計一個 sqlserver 2005 數據庫,並在此過程中嘗試糾正 tblUsers、tblUserRoles 和 tblRoles 之間的簡單查找表缺陷(tblUserRoles 有自己的 pk 欄位)。

在嘗試進行此更改時,外鍵關係被刪除並重新創建,但事實並非如此。

每當我嘗試:

ALTER TABLE [dbo].[tblUserRoles] ADD CONSTRAINT [Relationship26] FOREIGN KEY ([UserID]) REFERENCES [dbo].[tblUsers] ([UserID])
go
ALTER TABLE [dbo].[tblUserRoles] ADD CONSTRAINT [Relationship27] FOREIGN KEY ([RoleID]) REFERENCES [dbo].[tblRoles] ([RoleID])
go

我得到:

Msg 547, Level 16, State 0, Line 230

ALTER TABLE 語句與 FOREIGN KEY 約束“Relationship26”衝突。衝突發生在數據庫“AhelpDev”、表“dbo.tblUsers”、列“UserID”中。消息 547,級別 16,狀態 0,第 232 行 ALTER TABLE 語句與 FOREIGN KEY 約束“Relationship27”衝突。衝突發生在數據庫“AhelpDev”、表“dbo.tblRoles”、列“RoleID”中。

但是當我:

ALTER TABLE [dbo].[tblUserRoles] Drop CONSTRAINT [Relationship26]
go
ALTER TABLE [dbo].[tblUserRoles] Drop CONSTRAINT [Relationship27]
go

我得到:

Msg 3728, Level 16, State 1, Line 236
'Relationship26' is not a constraint.
Msg 3727, Level 16, State 0, Line 236
Could not drop constraint. See previous errors.
Msg 3728, Level 16, State 1, Line 238
'Relationship27' is not a constraint.
Msg 3727, Level 16, State 0, Line 238
Could not drop constraint. See previous errors.

當我執行時:

select * from  sys.Foreign_keys where name in ('relationship26', 'relationship27')

它不返回任何記錄。我被難住了,我求助於你!

我什至試圖複製數據庫,看看我能不能把它留在後面……我不能!

我期待著你的回答。

您無法添加約束,tblUserRoles因為此表中的數據已經違反了您嘗試添加的約束。

a) 仔細檢查參考值中的所有UserIDtblUserRoles``UserID``tblUsers

tblRolesb) 對和執行上述操作RoleID

c) 正如我想像的那樣,以上兩個都將返回不在引用表中的記錄,您需要在添加外鍵之前清理數據

d) 為你的外鍵命名一些有用的東西!如果我來處理你的數據庫,我怎麼知道是什麼Relationship26意思?!

引用自:https://dba.stackexchange.com/questions/82958