Scénář:
V předchozích příspěvcích jsme se dozvěděli, že pokud máme omezení cizího klíče s výchozím nastavením a pokusíme se aktualizovat hodnotu ve sloupci v referenční tabulce, který se používá jako referenční sloupec v omezení cizího klíče, dostaneme chybu. Probrali jsme několik způsobů, jak situaci řešit, podívejte se prosím na tento odkaz.Omezení cizího klíče poskytuje možnost nastavit akci Kaskádování, můžeme vytvořit omezení cizího klíče pomocí Kaskádové aktualizace.
Pokud je použito nastavení Kaskádové aktualizace, když aktualizujeme hodnotu v referenční tabulce , aktualizuje se také hodnota ve sloupci nadřazené tabulky (Tabulka cizích klíčů).
Pojďme otestovat tento scénář. Vytvořte dvě tabulky dbo.Customer a dbo.Orders se vztahem cizího klíče pomocí daného skriptu
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)
Zkontrolujeme data v tabulkách pomocí výběrového dotazu
Jak vytvořit omezení cizího klíče pomocí kaskády aktualizací na serveru SQL |
Pojďme spustit naše prohlášení o aktualizaci pro CustomerId v tabulce dbo.Customer a uvidíme, zda také aktualizuje hodnotu sloupce v dbo.Orders pro Customer_id.
update dbo.Customer set Customerid=100
Znovu zkontrolujeme data v našich tabulkách
Jak povolit kaskádové aktualizace s omezením cizího klíče na serveru SQL |
Jak vidíme, hodnota je aktualizována také ve sloupci dbo.Orders.Customer_id.
Video ukázka:Jak vytvořit omezení cizího klíče pomocí ON UPDATE CASCADE na SQL Server