Сценарий:
В предишни публикации научаваме, че ако имаме ограничение за външен ключ с настройка по подразбиране и се опитаме да актуализираме стойността в колоната в справочната таблица, която се използва като референтна колона в ограничението на външния ключ, получаваме грешка. Обсъдихме множество начини за справяне със ситуацията, моля, проверете тази връзка.Ограничението на външния ключ предоставя опцията за задаване на каскадно действие, можем да създадем ограничение на външния ключ с каскадна актуализация.
Ако се използват настройките за каскадно актуализиране, когато актуализираме стойността в таблицата с препратки, тя също ще актуализира стойността в колоната родителска таблица (таблица с външни ключове).
Нека тестваме този сценарий. Създайте две таблици dbo.Customer и dbo.Orders с връзка с външни ключове чрез даден скрипт
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) ) CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,Customer_id INT FOREIGN KEY REFERENCES Customer(CustomerId) ON UPDATE CASCADE ) --insert sample data insert into dbo.Customer (CustomerId,FName, LName,SSN) values (1,'Aamir','Shahzad','000-000-00') insert into dbo.Orders (OrderItemName,OrderItemAmt,Customer_Id) values ('TV',1,1)
Нека проверим данните в таблици, като използваме select query
Как да създадете ограничение на външния ключ с каскада за актуализиране в SQL Server |
Нека стартираме нашето изявление за актуализация на CustomerId в таблицата dbo.Customer и да видим дали той също актуализира стойността на колоната в dbo.Orders за Customer_id.
update dbo.Customer set Customerid=100
Нека отново проверим данните в нашите таблици
Как да активирате каскадно актуализиране с ограничение на външния ключ в SQL Server |
Както можем да видим, че стойността се актуализира и в колоната dbo.Orders.Customer_id.
Видео демонстрация:Как да създадете ограничение на външния ключ с ON UPDATE CASCADE в SQL Server