sanjaysgh Ответов: 4

Оператор DELETE конфликтует с ограничением ссылки


The DELETE statement conflicted with the REFERENCE constraint "FK_User_History_Tbl_Customer". The conflict occurred in database "KHUB_DB", table "dbo.User_History", column 'UserId'.
The statement has been terminated.

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Почему вы отвергли мой ответ? Вы приняли его вчера.

Есть ли какие-то проблемы? Пожалуйста, не стесняйтесь спрашивать.

Если вы сделали это по ошибке, то, пожалуйста, примите это снова.

Спасибо,
Тадит.

sanjaysgh

сэр я сделал это по ошибке теперь я снова принимаю ваш ответ

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Большое спасибо. Нет проблем, это происходит со многими членами... :)

4 Ответов

Рейтинг:
7

OriginalGriff

- Да?
Сообщение довольно явное: вы пытаетесь удалить что-то, на что ссылаются в другом месте базы данных, и существует ограничение, что вы не можете этого сделать, чтобы предотвратить "висячие" ссылки.

Вероятно, вы пытаетесь удалить строку, которая используется в качестве внешнего ключа в другой таблице: "User_history". Чтобы удалить его, вы должны сначала удалить строки, которые полагаются на него.


Рейтинг:
28

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Вы пытаетесь удалить запись из таблицы, которая имеет ссылку в другой таблице.

Здесь REFERENCE ограничение есть "FK_User_History_Tbl_Customer".

Столы есть User_History и Tbl_Customer.
UserId на столбец ссылается Tbl_Customer Стол.

При попытке удалить строку из User_History Таблица, она приходит к знанию, что одна и та же строка имеет некоторую связанную строку в Tbl_Customer Стол.

Итак, вам нужно удалить из Tbl_Customer Сначала таблица, а затем удалить из таблицы User_History.

Если вы хотите удалить строку, то вы должны выполнить следующие два запроса в последовательности.

DELETE FROM Tbl_Customer
WHERE UserId = [[[UserIdToDelete]]];

DELETE FROM User_History
WHERE UserId = [[[UserIdToDelete]]]


Iad90

Что делать, если я хочу удалить только из Tbl_Customer и сохранить User_History, не заражая ссылочное ограничение ? Есть ли какое-то решение для этого ?

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Вы можете сделать это в запросе временно. Но не забудьте включить их снова после операции удаления.

Обратитесь к ответу здесь - Как удалить без ON DELETE CASCADE (conflict REFERENCE constraint)

Рейтинг:
2

jizz

Приведенные выше решения объясняют, в чем заключается проблема, но не объясняют явно, как ее исправить, что можно сделать без написания каких-либо SQL-запросов или другого кода.

Самое простое решение-перейти в SSMS и открыть диаграмму базы данных

выберите отношение

Затем в его свойствах выберите пункт Удалить - каскад

Тогда все делается за вас с помощью SSMS


CHill60

Неужели? Вы снова открыли 4-летний вопрос для этого?
"Каскадное удаление" означает, что ребенок записи удаляются, когда запись удаляется из системы. Родитель стол. Ситуация, описанная ОП, заключается в том, что они пытаются удалить дочернюю строку до удаление строк, которые зависят от него, или перед удалением данных из столбца FK.
Конечно, каскадное удаление означало бы только один шаг, если бы они удалили строку в родительской таблице, но это не решает эту проблему. Однако принятые ответы, очевидно, делают это.
Придерживайтесь ответов на новые сообщения, где ОП все еще нуждается в помощи, и убедитесь, что вы внимательно прочитали вопрос

jizz

I found this thread because I had the exact same error in an application. The solution I have provided fixed it - so thats all that matters. You must be mistaken sorry. What SSMS implements in the SQL I do not know. But I assure you I had the exact same error & the procedure is correct. I implemented this - no further error & my application works perfectly. So some poor coder may come accross the rambling about the SQL and spend an hour trying to figure it all out. On other sites I have found multiple ramblings about coding the C# to correct the error. All along it is simply corrected in SSMS. Perhaps some people like to look clever when they are afflicted with analysis paralysis & should instead be maximizing the tools available to be productive. Also I dont care if a thread is 1000 years old - if I have a contribution I will make it.

CHill60

Я не ошибаюсь - или если я ошибаюсь, то документация Microsoft также должна ошибаться. Вряд ли.
SSMS ничего не реализует "в SQL". Все пользователи программы не должны иметь устройств самообслуживания, установленных на их набор. Все, что вы продемонстрировали в своем ответе,-это то, что вы не знаете, как разрабатывать приложения, использующие базы данных SQL Server в среде, не являющейся средой разработки.
Очевидно, я не единственный, кто заметил, что ваше "решение" было отвергнуто. Мой совет все еще остается в силе

Рейтинг:
18

Dharmesh Kanzariya

привет,

сначала вы должны удалить запись из внешняя таблица а потом после того как тебе придется удалить запись с самого начала первичный ключ Стол(главная таблица).

с наилучшими пожеланиями....