sql >> Databasteknik >  >> RDS >> Sqlserver

Det går inte att trunkera tabellen eftersom den refereras av en FOREIGN KEY-begränsning - SQL Server / TSQL Tutorial Del 70

Scenario:

Du måste trunkera en tabell men när du försöker köra trunkera tabell tabellnamn. Du får nedanstående fel.

Msg 4712, Level 16, State 1, Line 43
Kan inte trunkera tabellen 'SchemaName.TableName' eftersom den refereras av en FOREIGN KEY-begränsning.

Hur skulle du trunkera den här tabellen?

Lösning:

Eftersom tabellen är involverad i Foreign Key-relationen måste du först släppa den främmande nyckel-begränsningen och sedan köra trunkate table-satsen.

Låt oss demonstrera detta exempel, jag ska skapa två tabeller dbo.Customer och dbo.Orders och skapa sedan Foreign Key Constraint på en av kolumnerna i Dbo.Orders to dbo.Customer-tabellen.

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)
 
 
 Om jag nu försöker trunkera dbo.Orders-tabellen kommer det inte att ge något fel. Men när jag försöker trunkera dbo.Customer-tabellen kommer det att ge ett fel som dbo.Customer är startreferenser av Foreign Key Constraint.

Hur man trunkerar en tabell som refereras av Foreign Key Constraint i SQL Server

Vi kan släppa begränsningen tills vidare, trunkera tabellen och sedan återskapa begränsningen för främmande nyckel.

För att hitta begränsningarna för främmande nyckel i en tabell kan du använda uttalandet nedan.

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
 
 
Hur får man ett begränsningsnamn från systemtabeller i SQL Server
 
 Skriptet nedan kan användas för att generera drop Constraint-sats för din tabell

 
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') 
 
 
Hur man släpper utländsk nyckelbegränsning på tabell i SQL Server
 Ta resultatet för Drop Foreign Key Constraint och kör efter det, kör din trunkeringstabellsats för att trunkera tabellen. Det bör slutföras utan några fel.


Videodemo :Det går inte att trunkera tabellen eftersom den refereras av en FOREIGN KEY-begränsning


  1. Hur man listar databaser och tabeller i PostgreSQL

  2. Vad gör en databasdesigner?

  3. Jämför datum lagrade som sträng med Datetime

  4. CONVERT() i SQL Server