シナリオ:
テーブルを切り捨てる必要がありますが、テーブルtableNameを切り捨てようとすると。以下のエラーが発生します。Msg 4712、レベル16、状態1、行43
テーブル'SchemaName.TableName'は、FOREIGN KEY制約によって参照されているため、切り捨てることができません。
このテーブルをどのように切り捨てますか?
解決策:
外部キー関係に関与するテーブルとして、最初に外部キー制約を削除してから、truncatetableステートメントを実行する必要があります。この例のデモを行い、2つのテーブルdbo.Customerを作成します。 dbo.Ordersを実行してから、Dbo.Ordersからdbo.Customerテーブルの列の1つに外部キー制約を作成します。
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が外部キー制約による参照を開始するため、エラーがスローされます。
SQLServerの外部キー制約によって参照されるテーブルを切り捨てる方法 |
今のところ、制約を削除し、テーブルを切り捨ててから、外部キー制約を再作成できます。
テーブルで外部キー制約を見つけるには、以下のステートメントを使用できます。
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
SQLServerのシステムテーブルから制約名を取得する方法 |
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')
SQLServerのテーブルに外部キー制約を削除する方法 |
ビデオデモ:FOREIGN KEY制約によって参照されているため、テーブルを切り捨てることができません