Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Констрейнта нет, но он есть  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
Такая дурацкая ситуация. Есть таблица, у нее некогда был констрейнт - foreign key. Был, потому что был удален. В настоящее время при попытке восстановить этот констрейнт:
alter table dbo.SomeTable table add constraint FK_SomeTable_Parent foreign key (Parent) references dbo.SomeTable(Id)

вылетает вот такое:

The ALTER TABLE statement conflicted with the FOREIGN KEY SAME TABLE constraint "FK_SomeTable_Parent".
The conflict occurred in database "db_logo", table "dbo.SomeTable", column 'Id'

при том, что констрейнта FK_SomeTable_Parent в природе не существует - он не отображается в ноде Keys у таблицы в SSMS, его нет в sys.objects и sys.key_constraints.
Более того, если дать этому констрейнту абсолютно произвольное имя - типа
alter table dbo.SomeTable table add constraint FK_SomeTable_Parentdgfgsdfjghsljkdfjksjkdfghlsd foreign key (Parent) references dbo.SomeTable(Id)

будет выдано вот такое:

The ALTER TABLE statement conflicted with the FOREIGN KEY SAME TABLE constraint "FK_SomeTable_Parentdgfgsdfjghsljkdfjksjkdfghlsd".
The conflict occurred in database "db_logo", table "dbo.SomeTable", column 'Id'

Как это понимать, и как лечить?
select @@version

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)
19 ноя 14, 11:52    [16870550]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
Glory
Member

Откуда:
Сообщений: 104751
Сон Веры Павловны
при том, что констрейнта FK_SomeTable_Parent в природе не существует - он не отображается в ноде Keys у таблицы в SSMS, его нет в sys.objects и sys.key_constraints.

А скриптование объекта что показывает ?
А попытка удаление этого FOREIGN KEY SAME TABLE что дает ?
19 ноя 14, 11:55    [16870573]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а пощупать можно хоть как-то?
19 ноя 14, 11:57    [16870612]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
Crimean
Member

Откуда:
Сообщений: 13147
DDL триггер??
19 ноя 14, 12:04    [16870671]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
CONSTRAINT на ту же таблицу. NO ACTION.
Все данные в таблице удовлетворяют констрейнту?
Например, есть Parent IS NULL?
19 ноя 14, 12:45    [16870962]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
То есть, в сообщениях ни разу не написано, что констрейнт уже есть.
19 ноя 14, 12:46    [16870975]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Это ошибка проверки ключа перед созданием, а не существующий констрейнт.
19 ноя 14, 12:50    [16871007]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Владислав Колосов
Это ошибка проверки ключа перед созданием, а не существующий констрейнт.


+1

если констрейнт уже есть получаем

"There is already an object named 'r_b_id' in the database."

а вот если данные кривые получаем

"The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "r_b_id". The conflict occurred in database "EDC9", table "dbo.a", column 'id'."

но я чот думал что совсем очевидные версии уже проверены :)
19 ноя 14, 12:57    [16871099]     Ответить | Цитировать Сообщить модератору
 Re: Констрейнта нет, но он есть  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
Crimean
но я чот думал что совсем очевидные версии уже проверены :)

Мда. Не были, как выяснилось. Спасибо всем.
19 ноя 14, 14:42    [16872094]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить