Scenario:
Stai lavorando come sviluppatore di SQL Server, devi creare due tabelle con relazione primaria -chiave esterna. Si desidera creare un vincolo di chiave esterna con l'impostazione se il record verrà eliminato dalla tabella di riferimento (tabella della colonna della chiave primaria), non dovrebbe essere eliminato dalla tabella padre (tabella dei vincoli di chiave esterna) ma il valore dovrebbe essere aggiornato su Null.Soluzione:
Possiamo usare ON DELETE SET NULL con la definizione di vincolo di chiave esterna per implementare il requisito di cui sopra.Eseguiamo utilizzando lo script seguente.
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)
Controllare i dati nelle tabelle utilizzando Seleziona query
Come creare un vincolo di chiave esterna con ON DELETE SET NULL in SQL Server |
Eliminiamo la riga dalla tabella di riferimento (tabella della colonna della chiave primaria) e controlliamo se i record esistono ancora nella tabella principale (tabella dei vincoli della chiave esterna) e il valore della colonna è aggiornato a Null.
--Delete the Record from Referenced Table(PK Column Table) Delete from dbo.Customer where CustomerId=1
Come utilizzare l'opzione ON DELETE SET NULL con il vincolo di chiave esterna in SQL Server |
Come possiamo vedere, il record viene eliminato dalla tabella di riferimento (tabella della colonna della chiave primaria) ma è ancora presente nella tabella principale (tabella dei vincoli della chiave esterna) ma il valore viene aggiornato a Null come previsto.
Video demo:come creare vincoli di chiave esterna con l'opzione ON DELETE SET NULL in SQL Server