2011-02-01 145 views
15

我對SQL中的腳本編程很陌生,而且在其中一個腳本中遇到錯誤。 存在問題的部分是:ALTER TABLE語句與FOREIGN KEY約束衝突

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE dbo.WorkspaceSettings 
(
    Id INT NOT NULL IDENTITY PRIMARY KEY , 
     ReportColorRGB1 VARCHAR(15) NOT NULL DEFAULT '61,105,138' , 
    ReportColorRGB2 VARCHAR(15) NOT NULL DEFAULT '180,210,121' 
) 

GO 

ALTER TABLE Workspace ADD WorkspaceSettingsId int NOT NULL default 1; 

GO 
ALTER TABLE Workspace 
ADD CONSTRAINT FK_WorkspaceSettings_Workspace 
FOREIGN KEY (WorkspaceSettingsId) 
REFERENCES WorkspaceSettings(Id); 
GO 

而且收到以下錯誤信息:

消息547,級別16,狀態0,第1行
ALTER TABLE語句衝突與外鍵約束「 FK_WorkspaceSettings_Workspace」。衝突發生在數據庫「ClearRisk2_0」,表「dbo.WorkspaceSettings」,列'Id'中。

有人可以告訴我我要去哪裏嗎?

回答

34

您爲Workspace.WorkspaceSettingsId列指定的默認值1不存在於WorkspaceSettings表中,因此違反了FK。

+0

天哪!你節省了我的時間! 謝謝! – kevin 2012-12-03 10:09:49

-1

只需添加下面的語句ALTER TABLE sattement後:

with nocheck 

所以,這將是:

Use Database_name 

Go 
    ALTER TABLE ResultScan with nocheck 
     ADD CONSTRAINT FK_ResultScan_ListVM FOREIGN KEY (TypeAnVirus)  
     REFERENCES ListVM (Id)  
     ON DELETE CASCADE  
     ON UPDATE CASCADE  
    ;  
    GO 
+0

重要的是要解釋這裏沒有檢查。這很可能不會解決問題 - 只是隱藏它,並在稍後造成更大的問題。 – axlj 2016-12-28 08:46:52

相關問題