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 |
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 |
Video Demo:Impossibile troncare la tabella perché è referenziata da un vincolo FOREIGN KEY