Szenario:
Sie müssen eine Tabelle kürzen, aber wenn Sie versuchen, truncate table tableName auszuführen. Sie erhalten die folgende Fehlermeldung.Msg 4712, Level 16, State 1, Line 43
Die Tabelle 'SchemaName.TableName' kann nicht abgeschnitten werden, da sie von einer FOREIGN KEY-Einschränkung referenziert wird.
Wie würden Sie diese Tabelle kürzen?
Lösung:
Da die Tabelle an der Fremdschlüsselbeziehung beteiligt ist, müssen Sie zuerst die Fremdschlüsselbeschränkung löschen und dann die Anweisung zum Abschneiden der Tabelle ausführen.Lassen Sie uns dieses Beispiel demonstrieren, ich werde zwei Tabellen dbo.Customer erstellen und dbo.Orders und erstellen Sie dann eine Fremdschlüsseleinschränkung für eine der Spalten von Dbo.Orders in die Tabelle 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)Wenn ich jetzt versuche, die dbo.Orders-Tabelle zu kürzen, wird kein Fehler ausgegeben. Aber wenn ich versuche, die dbo.Customer-Tabelle zu kürzen, wird ein Fehler ausgegeben, da dbo.Customer Referenzen durch Foreign Key Constraint beginnt.
Wie man eine Tabelle kürzt, auf die durch Foreign Key Constraint in SQL Server verwiesen wird |
Wir können die Einschränkung vorerst löschen, die Tabelle kürzen und dann die Fremdschlüssel-Einschränkung neu erstellen.
Um die Fremdschlüssel-Einschränkungen für eine Tabelle zu finden, können Sie die folgende Anweisung verwenden.
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
So erhalten Sie den Constraint-Namen aus Systemtabellen 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')
Wie man Fremdschlüsseleinschränkungen auf Tabellen in SQL Server löscht |
Video-Demo:Tabelle kann nicht abgeschnitten werden, da sie von einer FOREIGN KEY-Einschränkung referenziert wird