2017-01-30 3 views
0

В развертывании мне пришлось откат, потому что SQL вызвал ошибку FOREIGN KEY CONSTRAINT. Таблица имеет миллионы строк. Может ли кто-нибудь увидеть что-нибудь в этом SQL, что может вызвать это?Null FK Ссылки вызвали ошибку FK Constraint

я больше не исходное сообщение под рукой, как это:

ограничение внешнего ключа "FSomeTable1"

... это было буквально очень ваниль

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

  • Это был новый столбец
  • программы SEED DATA должен был быть выполнен в другом сценарии, так что никаких данных не было в tResult_Status еще

ТАБЛИЦА ОПРЕДЕЛЕНИЯ:

CREATE TABLE [dbo].[SomeTable](
    [Claim_ID] [varchar](25) NOT NULL, 
    ...other columns do exist... 
    [Result_Status_Id] [uniqueidentifier] NULL, 
PRIMARY KEY CLUSTERED 
(
    [Claim_ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [stp].[tResult_Status](
    [Result_Status_Id] [UNIQUEIDENTIFIER] NOT NULL CONSTRAINT [DResult_Status] DEFAULT (NEWSEQUENTIALID()), 
    [Result_Status_Name] [NVARCHAR](50) NOT NULL, 
    [System_Value_Indicator] [BIT] NOT NULL, 
    [Executed_By_Name] [NVARCHAR](400) NOT NULL, 
    [Executed_Datetime] [DATETIME] NOT NULL, 
CONSTRAINT [PResult_Status] PRIMARY KEY CLUSTERED 
(
    [Result_Status_Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

РАСКРЫТИЯ SCRIPT ОТЧЕТЫ:

ALTER TABLE [dbo].[SomeTable] WITH CHECK ADD CONSTRAINT [FSomeTable1] FOREIGN KEY([Result_Status_Id]) 
REFERENCES [dbo].[tResult_Status] ([Result_Status_Id]) 
GO 

ALTER TABLE [dbo].[SomeTable] CHECK CONSTRAINT [FSomeTable1] 
GO 
+0

Можете ли вы указать общее сообщение об ошибке – TheGameiswar

+0

Каковы типы данных двух столбцов? Можете ли вы опубликовать (частичный) сценарий создания таблицы для двух таблиц, используемых в FK? – Pred

+0

Выберите * from SomeTable WHERE Result_Status_Id NOT IN (SELECT result_Status_id FROM tResult_Status) должен отображать оскорбительные строки? Является ли поле NULLABLE в SomaTable? – AntDC

ответ

2

Это потому, что у вас есть значение в SomeTable, которое не имеет соответствующего значения в tResult_Status, а ограничение FK не может быть создано. Вы можете найти, какие записи не имеют допустимых значений с таким запросом (на основе ваших имен таблиц).

SELECT * 
FROM SomeTable s 
WHERE NOT EXISTS (SELECT 1 FROM tResult_Status r WHERE r.Result_Status_Id = s.Result_Status_Id) 
+0

Это была НОВАЯ КОЛОНКА –

+0

Вы уверены, что нет процессов/кода, которые ничего записывают в новый столбец? – Pred

+0

Да, вот почему я преуспел, и ни один из ответов DBA не отвечает - вот почему я пишу –

Смежные вопросы