Оператор ALTER TABLE конфликтует с ограничением FOREIGN KEY - PullRequest
15 голосов
/ 01 февраля 2011

Я новичок в написании сценариев на 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

и получить следующее сообщение об ошибке:

Сообщение 547, уровень 16, состояние 0, строка 1
Оператор ALTER TABLE конфликтует сограничение FOREIGN KEY "FK_WorkspaceSettings_Workspace".Конфликт произошел в базе данных «ClearRisk2_0», таблице «dbo.WorkspaceSettings», столбце «Id».

Может кто-нибудь сказать мне, где я иду не так?

Ответы [ 2 ]

35 голосов
/ 01 февраля 2011

Значение по умолчанию 1, указанное вами для столбца Workspace.WorkspaceSettingsId, еще не существует в вашей таблице WorkspaceSettings, следовательно, нарушение FK.

0 голосов
/ 28 декабря 2016

Просто добавьте следующую фразу после заполнения таблицы ALter:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...