Scenariusz:
Pracujesz jako programista SQL Server, musisz utworzyć dwie tabele z relacją podstawowy-klucz obcy. Chcesz utworzyć ograniczenie klucza obcego z ustawieniem, czy rekord zostanie usunięty z tabeli odniesienia (tabela kolumn klucza podstawowego), nie powinien być usuwany z tabeli nadrzędnej (tabela ograniczeń klucza obcego), zamiast tego wartość powinna zostać zaktualizowana do wartości Null.Rozwiązanie:
Możemy użyć ON DELETE SET NULL z definicją ograniczenia klucza obcego, aby zaimplementować powyższe wymaganie.Wykonajmy za pomocą poniższego 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 DELETE SET NULL ) --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ź dane w tabelach za pomocą zapytania wybierającego
Jak utworzyć ograniczenie klucza obcego za pomocą ON DELETE SET NULL w SQL Server |
Usuńmy wiersz z tabeli odniesienia (tabela kolumn klucza podstawowego) i sprawdź, czy rekordy nadal istnieją w tabeli nadrzędnej (tabela ograniczeń kluczy obcych), a wartość kolumny została zaktualizowana do wartości Null.
--Delete the Record from Referenced Table(PK Column Table) Delete from dbo.Customer where CustomerId=1
Jak używać opcji ON DELETE SET NULL z ograniczeniem klucza obcego w SQL Server |
Jak widać, rekord został usunięty z tabeli odniesienia (tabela kolumn klucza podstawowego), ale nadal jest obecny w tabeli nadrzędnej (tabela ograniczeń kluczy obcych), ale wartość jest aktualizowana do wartości Null zgodnie z oczekiwaniami.
Wideo demonstracyjne:Jak utworzyć ograniczenie klucza obcego z opcją ON DELETE SET NULL w SQL Server