Scénario :
Vous devez tronquer une table mais lorsque vous essayez d'exécuter tronquer la table tableName. Vous obtenez l'erreur ci-dessous.Msg 4712, Niveau 16, État 1, Ligne 43
Impossible de tronquer la table 'SchemaName.TableName' car elle est référencée par une contrainte FOREIGN KEY.
Comment tronqueriez-vous ce tableau ?
Solution :
Comme la table est impliquée dans la relation de clé étrangère, vous devez d'abord supprimer la contrainte de clé étrangère, puis exécuter l'instruction truncate table.Démomonons cet exemple, je vais créer deux tables dbo.Customer et dbo.Orders, puis créez une contrainte de clé étrangère sur l'une des colonnes de Dbo.Orders dans la table dbo.Customer.
USE YourDatabaseNameGOCREATE 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 Clé étrangère(CustomerId) Références dbo.Customer(CustomerId)
Maintenant, si j'essaie de tronquer la table dbo.Orders, cela ne générera aucune erreur. Mais lorsque j'essaie de tronquer la table dbo.Customer, une erreur est générée car dbo.Customer commence les références par une contrainte de clé étrangère.
Comment tronquer une table qui est référencée par une contrainte de clé étrangère dans SQL Server |
Nous pouvons supprimer la contrainte pour l'instant, tronquer la table, puis recréer la contrainte de clé étrangère.
Pour rechercher les contraintes de clé étrangère sur une table, vous pouvez utiliser l'instruction ci-dessous.
SELECT * FROM sys.foreign_keysWHERE referenced_object_id =object_id('dbo.Customer')
Comment obtenir le nom de la contrainte à partir des tables système dans SQL Server |
Le script ci-dessous peut être utilisé pour générer une instruction drop Constraint pour votre table
SELECT 'ALTER TABLE ' + OBJECT_SCHEMA_NAME(parent_object_id) +'.[' + OBJECT_NAME(parent_object_id) +'] DROP CONSTRAINT ' + nom comme DropFKConstraintFROM sys.foreign_keysOÙ referenced_object_id =object_id('dbo.Customer')
Comment supprimer une contrainte de clé étrangère sur une table dans SQL Server |
Prenez le résultat pour Drop Foreign Key Constraint et exécutez, après cela, exécutez votre instruction truncate table pour tronquer la table. Elle devrait se terminer sans erreur.
Démonstration vidéo :Impossible de tronquer la table car elle est référencée par une contrainte FOREIGN KEY