2011-02-01 18 views
15

Jestem trochę nowy w skryptowaniu w SQL i napotkałem błąd w jednym z moich skryptów. Problematyczny sekcja jest:Instrukcja ALTER TABLE jest niezgodna z kluczem 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 

I pojawia się następujący komunikat o błędzie:

Msg 547, Level 16, State 0, linia 1
ALTER TABLE skonfliktowany z FOREIGN KEY przymusu " FK_WorkspaceSettings_Workspace ". Konflikt wystąpił w bazie danych "ClearRisk2_0", tabela "dbo.WorkspaceSettings", kolumna "Id".

Czy ktoś może mi powiedzieć, gdzie idę źle?

Odpowiedz

34

Domyślna wartość 1 określona dla kolumny Workspace.WorkspaceSettingsId jeszcze nie istnieje w tabeli WorkspaceSettings, stąd naruszenie FK.

+0

Gosh !! oszczędzasz moje godziny !!! Dzięki! – kevin

-1

Wystarczy dodać następujące zdanie po alter table sattement:

with nocheck 

Tak, to będzie:

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

Ważne jest, aby wyjaśnić, co tu robi "brak czeku". Najprawdopodobniej to nie rozwiąże problemu - - Po prostu ukryj to i wywołaj większe problemy później. – axlj

Powiązane problemy