ALTER TABLE语句与FOREIGN KEY约束冲突

时间:2011-02-01 17:29:27

标签: sql sql-server tsql

我不熟悉SQL中的脚本,我在其中一个脚本中遇到错误。 有问题的部分是:

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

并收到以下错误消息:

  

Msg 547,Level 16,State 0,Line 1
  ALTER TABLE语句与FOREIGN KEY约束“FK_WorkspaceSettings_Workspace”冲突。冲突发生在数据库“ClearRisk2_0”,表“dbo.WorkspaceSettings”,列'Id'。

有人可以告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:35)

您为Workspace.WorkspaceSettingsId列指定的默认值1尚未存在于WorkspaceSettings表中,因此违反了FK。

答案 1 :(得分:-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