Сценарий:
Трябва да съкратите таблица, но когато се опитате да изпълните съкратете таблица 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


