#sql-server
#sql-сервер
Вопрос:
Я хочу удалить записи с одинаковым порядковым номером. Например, если у меня есть 10 продуктов с одинаковым номером заказа.Когда я хочу удалить эти десять строк с порядковым номером, отображается ошибка, подобная этой.
DELETE FROM [NORTHWND].[dbo].[Orders]
WHERE EmployeeID = 5
Сообщение 547, уровень 16, состояние 0, строка 22 Инструкция DELETE конфликтовала
с ограничением ССЫЛКИ «FK_Order_Details_Orders». Конфликт
произошло в базе данных «NORTHWND», таблица «dbo.Сведения о заказе», столбец
‘OrderID’. Выполнение инструкции завершено.
Комментарии:
1. В этом весь смысл ограничений внешнего ключа: они мешают вам удалять данные, на которые ссылаются в другом месте, чтобы сохранить ссылочную целостность: dba.stackexchange.com/questions/153351 /…
2. Что насчет ошибки, вы не понимаете? Вы сказали, что хотите удалить заказы с повторяющимися номерами заказов, но вы ссылаетесь на
EmployeeID
здесь, а не наOrderID
3. просто пример
4. Вам нужно сначала удалить их данные о заказе, прежде чем удалять эти заказы.
5. Возможно, вам следует изучить концепцию реляционной базы данных, прежде чем пытаться что-либо удалить.
Ответ №1:
Чтобы удалить записи из таблицы заказов, сначала вы должны удалить записи из таблицы «Сведения о заказе», поскольку им не разрешается ссылаться на запись, которая не существует.
DELETE FROM [NORTHWND].[dbo].[Order Details]
WHERE OrderID IN (SELECT OrderID FROM [NORTHWND].[dbo].[Order] WHERE EmployeeID = 5)
Затем, если нет дополнительных ограничений, вы можете приступить к удалению записи из таблицы заказов.
DELETE FROM [NORTHWND].[dbo].[Order]
WHERE EmployeeID = 5
Ответ №2:
Не удается удалить bcoz, имеющие отношение к идентификатору в таблице Order_Details (OrderDetails)
DELETE FROM Order_Details WHERE OrderId IN (SELECT ID FROM Orders WHERE EmployeeId = 5)
DELETE FROM Orders WHERE EmployeeId = 5