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


