Scenario:
U moet een tabel afkappen, maar wanneer u probeert uit te voeren truncate table tableName. U krijgt onderstaande foutmelding.Msg 4712, Level 16, State 1, Line 43
Kan tabel 'SchemaName.TableName' niet afkappen omdat ernaar wordt verwezen door een FOREIGN KEY-beperking.
Hoe zou je deze tabel afkappen?
Oplossing:
Aangezien de tabel betrokken is bij de Foreign Key-relatie, moet u eerst de beperking van de refererende sleutel verwijderen en vervolgens de instructie truncate table uitvoeren.Laten we dit voorbeeld demonstreren, ik ga twee tabellen maken dbo.Customer en dbo.Orders en maak vervolgens een Foreign Key Constraint in een van de kolommen van Dbo.Orders naar de tabel dbo.Customer.
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)Als ik nu de dbo.Orders-tabel probeer af te kappen, wordt er geen fout gegenereerd. Maar wanneer ik de dbo.Customer-tabel probeer af te kappen, geeft deze een fout als dbo. De klant begint met verwijzingen door Foreign Key Constraint.
Een tabel afkappen waarnaar wordt verwezen door Foreign Key Constraint in SQL Server |
We kunnen de beperking voor nu laten vallen, de tabel afkappen en vervolgens de beperking voor een externe sleutel opnieuw maken.
Om de beperkingen voor buitenlandse sleutels in een tabel te vinden, kunt u het onderstaande statement gebruiken.
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
De naam van de beperking ophalen uit systeemtabellen 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')
Foreign Key Constraint op tabel in SQL Server laten vallen |
Videodemo:kan de tabel niet afkappen omdat ernaar wordt verwezen door een FOREIGN KEY-beperking