sql >> Database >  >> RDS >> Sqlserver

Kan tabel niet afkappen omdat ernaar wordt verwezen door een FOREIGN KEY-beperking - SQL Server / TSQL-zelfstudie, deel 70

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
 
 Het onderstaande script kan worden gebruikt om een ​​drop Constraint-statement voor uw tabel te genereren

 
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
 Neem het resultaat voor Drop Foreign Key Constraint en voer het uit. Voer daarna uw truncate table-statement uit om de tabel af te kappen. Het zou zonder fouten moeten voltooien.


Videodemo:kan de tabel niet afkappen omdat ernaar wordt verwezen door een FOREIGN KEY-beperking


  1. Oracle (ORA-02270):geen overeenkomende unieke of primaire sleutel voor deze kolomlijstfout

  2. Syntaxisaccentuering configureren in SQLcl

  3. Virtuele machine verwijderen uit VirtualBox

  4. Slony-I 2.0.x upgraden naar de nieuwste versie 2.1.x