sql >> Database teknologi >  >> RDS >> Sqlserver

Tabellen kan ikke afkortes, fordi den refereres af en FOREIGN KEY-begrænsning - SQL Server / TSQL Selvstudium, del 70

Scenarie:

Du skal afkorte en tabel, men når du forsøger at udføre, afkort tabel tabelnavn. Du får fejlen under.

Besked 4712, niveau 16, tilstand 1, linje 43
Kan ikke afkorte tabellen 'SchemaName.TableName', fordi den refereres af en FOREIGN KEY-begrænsning.

Hvordan vil du afkorte denne tabel?

Løsning:

Som tabellen er involveret i Foreign Key-forholdet, skal du først droppe den fremmede nøgle-begrænsning og derefter udføre trunkeringstabelsætningen.

Lad os demonstrere dette eksempel, jeg vil oprette to tabeller dbo.Customer og dbo.Orders og opret derefter Foreign Key Constraint på en af ​​kolonnerne i Dbo.Orders til 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)
 
 
 Hvis jeg nu prøver at afkorte dbo.Orders-tabellen, vil den ikke give nogen fejl. Men når jeg forsøger at afkorte dbo.Customer-tabellen, vil den give fejl, da dbo.Customer er begyndelsesreferencer af Foreign Key Constraint.

Sådan afkortes en tabel, som refereres af Foreign Key Constraint i SQL Server

Vi kan droppe begrænsningen indtil videre, afkorte tabellen og derefter genskabe begrænsning af fremmednøgle.

For at finde begrænsningerne for fremmednøgle på en tabel kan du bruge sætningen nedenfor.

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
 
 
Sådan får du et begrænsningsnavn fra systemtabeller i SQL Server
 
 Nedenstående script kan bruges til at generere drop Constraint-sætning til din tabel

 
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') 
 
 
Sådan slipper du udenlandsk nøglebegrænsning på tabel i SQL Server
 Tag resultatet for Drop Foreign Key Constraint og udfør. Kør derefter din trunkeringstabelsætning for at afkorte tabellen. Den bør fuldføres uden nogen fejl.


Videodemo :Kan ikke afkorte tabellen, fordi den refereres af en FOREIGN KEY-begrænsning


  1. Sådan bruger du pgBackRest til at sikkerhedskopiere PostgreSQL og TimescaleDB

  2. Kan ikke dekryptere ved hjælp af pgcrypto fra AES-256-CBC, men AES-128-CBC er OK

  3. Find det mindste ubrugte tal i SQL Server

  4. Forståelse af kontrolbegrænsninger i PostgreSQL