シナリオ:
SQL Serverデータベース内のすべてのテーブルを切り捨てる必要があります。truncateステートメントを実行すると、エラー以下のエラーが発生します。メッセージ4712、レベル16、状態1、43行目
テーブルのSchemaNameを切り捨てることはできません。 TableName'は、FOREIGNKEY制約によって参照されているためです。
簡単な方法は、外部キー制約を削除し、テーブルを切り捨てて、外部キー制約を再作成することです。
データベースで外部キーの削除制約を生成するために使用できる投稿を書きました。ここをクリック。
ただし、それらを削除する前に、テーブルを切り捨てた後に実行できるように、外部キー制約の作成スクリプトを生成する必要があります。
以下のスクリプトを使用して、すべてのデータベースからのユーザーテーブル。
Select 'Truncate table '+'[' +Schema_name(Schema_id) +'].['+name+']' as TruncateTablesScript from sys.tables where is_ms_shipped=0
以下のスクリプトを使用して、データベースで外部キー制約を再生成できます。
;With CTE_FK AS ( SELECT Schema_Name(Schema_id) as TableSchemaName, object_name(FK.parent_object_id) ParentTableName, object_name(FK.referenced_object_id) ReferenceTableName, FK.name AS ForeignKeyConstraintName,c.name as RefColumnName, cf.name as ParentColumnList FROM sys.foreign_keys AS FK INNER JOIN sys.foreign_key_columns AS FKC ON FK.OBJECT_ID = FKC.constraint_object_id INNER JOIN sys.columns c on c.OBJECT_ID = FKC.referenced_object_id AND c.column_id = FKC.referenced_column_id INNER JOIN sys.columns cf on cf.OBJECT_ID = FKC.parent_object_id AND cf.column_id = FKC.parent_column_id where fk.is_ms_shipped=0 ) Select 'Alter table ['+TableSchemaName+'].['+ParentTableName+']' +' Add Constraint '+ForeignKeyConstraintName+ ' Foreign Key('+stuff(( Select ','+ParentColumnList from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '')+') References '+ '['+TableSchemaName+'].['+ReferenceTableName+']('+stuff(( Select ','+RefColumnName from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '')+')' AS CreateForeignKeyConstraintScript, ParentTableName, ReferenceTableName, ForeignKeyConstraintName from CTE_FK o group by tableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName
SQLServerデータベースで外部キー制約を再作成するためのスクリプトを生成する方法 |
ビデオデモ:生成の作成方法SQLServerで外部キー制約を再作成するためのスクリプト