2011-02-01 35 views
15

Sono una specie di novità nello scripting in SQL e ho riscontrato un errore in uno dei miei script. La sezione problematico è:L'istruzione ALTER TABLE è in conflitto con il vincolo 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 

E visualizzato il seguente messaggio di errore:

Msg 547, livello 16, stato 0, riga 1
L'istruzione ALTER TABLE conflitto con il vincolo FOREIGN KEY " FK_WorkspaceSettings_Workspace". Il conflitto si è verificato nel database "ClearRisk2_0", nella tabella "dbo.WorkspaceSettings", nella colonna "Id".

qualcuno può dirmi dove sto andando male?

risposta

34

Il valore predefinito di 1 specificato per la colonna Workspace.WorkspaceSettingsId non esiste ancora nella tabella WorkspaceSettings, quindi la violazione FK.

+0

Gosh !! risparmi le mie ore !!! Grazie !!! – kevin

-1

Basta aggiungere la seguente frase dopo la tabella Alter sattement:

with nocheck 

Quindi, sarà:

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

È importante spiegare che cosa "no check" fa qui. Molto probabilmente questo non risolverà il problema - - Basta nasconderlo e causare problemi più grandi in seguito. – axlj

Problemi correlati