Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Таблицата не може да се съкрати, защото се препраща от ограничение ВЪНШЕН КЛЮЧ - SQL Server / TSQL Урок, част 70

Сценарий:

Трябва да съкратите таблица, но когато се опитате да изпълните съкратете таблица 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
 
 Скриптът по-долу може да се използва за генериране на изявление на drop Constraint за вашата таблица

 
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
 Вземете резултата за Drop Foreign Key Constraint и изпълнете, След това изпълнете вашия оператор truncate table, за да truncate table. Трябва да завърши без грешка.


Видео демонстрация :Не може да се съкрати таблицата, защото се препраща от ограничение FOREIGN KEY


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добрият начин за съхраняване на време (hh:mm) в база данни

  2. Настройка на SQL Server – всичко е за измерване

  3. Списък с формати за дата, налични с CONVERT() в SQL Server

  4. Какво е СТАТИСТИЧЕСКО ВРЕМЕ в SQL Server?

  5. Как могат да бъдат временно деактивирани ограниченията на външния ключ с помощта на T-SQL?