Сценарий:
Трябва да съкратите таблица, но когато се опитате да изпълните съкратете таблица tableName. Получавате грешка по-долу.Съобщение 4712, ниво 16, състояние 1, ред 43
Не може да се съкрати таблицата 'SchemaName.TableName', защото се позовава от ограничение FOREIGN KEY.
Как бихте съкратили тази таблица?
Решение:
Тъй като таблицата участва във връзка с външния ключ, първо трябва да махнете ограничението на външния ключ и след това да изпълните оператора на таблицата truncate.Нека демонстрираме този пример, ще създам две таблици dbo.Customer и dbo.Orders и след това създайте ограничение на външния ключ в една от колоните на Dbo.Orders към таблицата 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)Сега, ако се опитам да съкратя таблицата dbo.Orders, няма да изведе грешка. Но когато се опитам да съкратя таблицата dbo.Customer, тя ще изведе грешка, тъй като dbo.Customer започва препратките чрез ограничение на външния ключ.
Как да съкратите таблица, която е препратка от ограничение на външния ключ в SQL Server |
Засега можем да премахнем ограничението, да съкратим таблицата и след това да създадем отново ограничението на външния ключ.
За да намерите ограниченията на външния ключ в таблица, можете да използвате оператора по-долу.
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
Как да получите име на ограничение от системни таблици в 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')
Как да премахнете ограничението на външния ключ върху таблицата в SQL Server |
Видео демонстрация :Не може да се съкрати таблицата, защото се препраща от ограничение FOREIGN KEY