Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Die Tabelle kann nicht abgeschnitten werden, da sie von einer FOREIGN KEY-Einschränkung referenziert wird – SQL Server / TSQL-Tutorial Teil 70

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
 
 Das folgende Skript kann verwendet werden, um eine drop Constraint-Anweisung für Ihre Tabelle zu generieren

 
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
 Nehmen Sie das Ergebnis für Drop Foreign Key Constraint und führen Sie es aus. Führen Sie danach Ihre Anweisung zum Abschneiden der Tabelle aus, um die Tabelle abzuschneiden. Es sollte ohne Fehler abgeschlossen werden.


Video-Demo:Tabelle kann nicht abgeschnitten werden, da sie von einer FOREIGN KEY-Einschränkung referenziert wird