シナリオ:
テーブルを切り捨てる必要がありますが、テーブル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制約によって参照されているため、テーブルを切り捨てることができません