シナリオ:
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で外部キー制約を再作成するためのスクリプト