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 |
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 |
Video ukázka:Nelze zkrátit tabulku, protože na ni odkazuje omezení FOREIGN KEY