Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile troncare la tabella perché viene referenziata da un vincolo FOREIGN KEY - Tutorial SQL Server/TSQL Parte 70

Scenario:

È necessario troncare una tabella ma quando si tenta di eseguire tronca tableName. Viene visualizzato un errore inferiore.

Msg 4712, livello 16, stato 1, riga 43
Impossibile troncare la tabella 'SchemaName.TableName' perché a essa viene fatto riferimento da un vincolo FOREIGN KEY.

Come troncare questa tabella?

Soluzione:

Poiché la tabella è coinvolta nella relazione di chiave esterna, devi prima eliminare il vincolo di chiave esterna e quindi eseguire l'istruzione tronca tabella.

Diamo un esempio a una dimostrazione, creerò due tabelle dbo.Customer e dbo.Orders e quindi creare Foreign Key Constraint su una delle colonne di Dbo.Orders a dbo.Customer table.

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,
    CustomerId int
    )

--Create Foreign Key Constraint 
    Alter table dbo.Orders with Nocheck
    Add Constraint Fk_CustomerId  
    Foreign Key(CustomerId) References dbo.Customer(CustomerId)
 
 
 Ora, se provo a troncare la tabella dbo.Orders, non genererà alcun errore. Ma quando provo a troncare la tabella dbo.Customer, verrà generato un errore come dbo.Customer inizia i riferimenti tramite il vincolo della chiave esterna.

Come troncare una tabella a cui fa riferimento un vincolo di chiave esterna in SQL Server

Per ora possiamo eliminare il vincolo, troncare la tabella e quindi ricreare il vincolo di chiave esterna.

Per trovare i vincoli di chiave esterna su una tabella, è possibile utilizzare l'istruzione seguente.

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
 
 
Come ottenere il nome del vincolo dalle tabelle di sistema in SQL Server
 
 Lo script seguente può essere utilizzato per generare l'istruzione di vincolo di rilascio per la tabella

 
SELECT 
    'ALTER TABLE ' 
    +  OBJECT_SCHEMA_NAME(parent_object_id) 
    +'.[' + OBJECT_NAME(parent_object_id) 
    +'] DROP CONSTRAINT ' 
    + name as DropFKConstraint
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer') 
 
 
Come eliminare il vincolo di chiave esterna su una tabella in SQL Server
 Prendi il risultato per Drop Foreign Key Constraint ed esegui, dopodiché esegui la tua istruzione tronca tabella per troncare la tabella. Dovrebbe essere completato senza alcun errore.


Video Demo:Impossibile troncare la tabella perché è referenziata da un vincolo FOREIGN KEY