Scenariusz:
Z poprzednich postów dowiadujemy się, że jeśli mamy Ograniczenie klucza obcego z ustawieniem domyślnym i spróbujemy zaktualizować wartość w kolumnie w tabeli referencyjnej, która jest używana jako kolumna referencyjna w ograniczeniu klucza obcego, otrzymujemy błąd. Omówiliśmy wiele sposobów radzenia sobie z tą sytuacją, sprawdź ten link.Ograniczenie klucza obcego zapewnia opcję ustawienia akcji kaskadowej, możemy utworzyć ograniczenie klucza obcego z aktualizacją kaskadową.
Jeśli używana jest aktualizacja ustawień kaskadowych, gdy aktualizujemy wartość w tabeli z odniesieniem , zaktualizuje ona również wartość w kolumnie tabeli nadrzędnej (tabela kluczy obcych).
Przetestujmy ten scenariusz. Utwórz dwie tabele dbo.Klient i dbo.Zamówienia z relacją klucza obcego według podanego skryptu
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)
Sprawdźmy dane w tabelach za pomocą select query
Jak utworzyć ograniczenie klucza obcego za pomocą kaskadowej aktualizacji w SQL Server |
Uruchommy naszą instrukcję aktualizacji dla CustomerId w tabeli dbo.Customer i zobaczmy, czy aktualizuje ona również wartość kolumny w dbo.Orders dla Customer_id.
update dbo.Customer set Customerid=100
Sprawdźmy jeszcze raz dane w naszych tabelach
Jak włączyć aktualizację kaskadową z ograniczeniem klucza obcego w SQL Server |
Jak widać, wartość jest aktualizowana również w kolumnie dbo.Orders.Customer_id.
Prezentacja wideo:Jak utworzyć ograniczenie klucza obcego za pomocą ON UPDATE CASCADE w programie SQL Server