sql >> データベース >  >> RDS >> Sqlserver

FOREIGN KEY制約によって参照されているため、テーブルを切り捨てることができません-SQL Server/TSQLチュートリアルパート70

    シナリオ:

    テーブルを切り捨てる必要がありますが、テーブル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のテーブルに外部キー制約を削除する方法
     ドロップ外部キー制約の結果を取得して実行します。その後、truncatetableステートメントを実行してテーブルを切り捨てます。エラーなしで完了するはずです。


    ビデオデモ:FOREIGN KEY制約によって参照されているため、テーブルを切り捨てることができません


    1. SQL Server(T-SQL)でデータベースメールプロファイルを更新するときに「プロファイル名が無効」を修正する方法

    2. MySQLの数値にはTOPX(または下)パーセントを選択します

    3. Where句のOracleDateTime?

    4. OracleDatabaseのすべての関数を一覧表示します