2011-02-01 64 views
15

Soy un poco nuevo en el scripting en SQL y he encontrado un error en uno de mis scripts. La sección problemática es:La instrucción ALTER TABLE está en conflicto con la restricción 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 

Y recibir el siguiente mensaje de error:

Msg 547, nivel 16, estado 0, línea 1
La sentencia ALTER TABLE en conflicto con la restricción FOREIGN KEY " FK_WorkspaceSettings_Workspace ". El conflicto se produjo en la base de datos "ClearRisk2_0", en la tabla "dbo.WorkspaceSettings", en la columna "Id".

¿Alguien puede decirme por dónde me equivoco?

Respuesta

34

El valor predeterminado de 1 que ha especificado para la columna Workspace.WorkspaceSettingsId aún no existe en su tabla WorkspaceSettings, de ahí la infracción FK.

+0

Gosh !! usted ahorra mis horas !!! ¡Gracias! – kevin

-1

Apenas añada la siguiente frase después de modificación de tabla sattement:

with nocheck 

Por lo tanto, será:

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

Es importante explicar lo que 'no check' hace aquí. Lo más probable es que esto no solucione el problema. - Solo ocúltalo y causa problemas más grandes más adelante. – axlj

Cuestiones relacionadas