sql >> Databáze >  >> RDS >> Sqlserver

Nelze zkrátit tabulku, protože na ni odkazuje omezení FOREIGN KEY - SQL Server / Výukový program TSQL, část 70

Scénář:

Potřebujete zkrátit tabulku, ale když se pokusíte provést zkrácení tabulky název_tabulky. Dostanete se pod chybu.

Zpráva 4712, úroveň 16, stav 1, řádek 43
Nelze zkrátit tabulku 'SchemaName.TableName', protože na ni odkazuje omezení FOREIGN KEY.

Jak byste zkrátili tuto tabulku?

Řešení:

Vzhledem k tomu, že tabulka je zapojena do vztahu cizího klíče, musíte nejprve zrušit omezení cizího klíče a poté provést příkaz truncate table.

Ukažme si tento příklad, vytvořím dvě tabulky dbo.Customer a dbo.Orders a poté vytvořte omezení cizího klíče v jednom ze sloupců Dbo.Orders do tabulky 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)
 
 
 Nyní, když se pokusím zkrátit tabulku dbo.Orders, nevyvolá to žádnou chybu. Ale když se pokusím zkrátit tabulku dbo.Customer, vyvolá to chybu, protože dbo.Customer je počáteční reference podle omezení cizího klíče.

Jak zkrátit tabulku, na kterou odkazuje omezení cizího klíče na serveru SQL Server

Prozatím můžeme zrušit omezení, zkrátit tabulku a poté znovu vytvořit omezení cizího klíče.

Chcete-li najít omezení cizího klíče v tabulce, můžete použít níže uvedený příkaz.

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
 
 
Jak získat název omezení ze systémových tabulek na serveru SQL Server
 
 Níže uvedený skript lze použít ke generování příkazu drop Constraint pro vaši tabulku

 
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') 
 
 
Jak zrušit omezení cizího klíče na tabulku v SQL Server
 Vezměte výsledek pro Drop Foreign Key Constraint a proveďte. Poté spusťte příkaz trucate table pro zkrácení tabulky. Mělo by být dokončeno bez jakékoli chyby.


Video ukázka:Nelze zkrátit tabulku, protože na ni odkazuje omezení FOREIGN KEY


  1. aktualizovat hodnoty sloupců sloupcem jiné tabulky na základě podmínky

  2. PostgreSQL dočasné tabulky

  3. Jak převést hodnotu data/času na řetězec v SQL Server pomocí CONVERT()

  4. Používání relačních databází MySQL na Gentoo