いくつかの既存のテーブルへの外部キー参照を持つ新しいテーブルがあります。新しいテーブルを初めて作成するときは、次の方法で外部キーを作成しました。
ALTER TABLE [dbo].[NewTable] WITH CHECK ADD FOREIGN KEY([SectionDatabaseID])
REFERENCES [dbo].[Section] ([SectionDatabaseID])
ALTER TABLE [dbo].[NewTable] WITH CHECK ADD FOREIGN KEY([TermDatabaseID])
REFERENCES [dbo].[Term] ([TermDatabaseID])
上記の方法では、独自の自動命名規則を使用して外部キー制約の名前が生成されます。
ただし、新しいテーブルを最初から作成して大きな変更を加える必要があるため、新しいテーブルを削除したいと思います。
明らかに、dropステートメントを実行するだけで、SQL Serverデータベースは、新しいテーブルに他のテーブルへの外部キー参照があることを通知します。
次のスクリプトを実行して、どの外部キーが存在するかを把握し、それらを削除できるようにすることを聞いたことがあります。
use perls;
SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME +
'] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']'
FROM information_schema.table_constraints
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' and TABLE_NAME = 'NewTable'
上記は、基本的に実行する必要のあるalterステートメントを示す結果を示します。
もっと自動化されたものが必要です。各外部キー制約を個別に削除する必要があるのに、テーブルのみを削除できるのはなぜですか?
もっと簡単な方法でテーブルをドロップしたいと思います。それは私が上でする必要があることよりも簡単でなければなりません。