列のデータ型を変更したい。外部キー制約とインデックスを無効にする前に列のデータ型を変更する
この列は他の2つのテーブルで外部キーとして参照されているため、他の2つのテーブルに外部キー制約をドロップする必要があります。
また、現在のテーブルにはインデックスを削除する必要があります。
どうすればいいですか?
列のデータ型を変更したい。外部キー制約とインデックスを無効にする前に列のデータ型を変更する
この列は他の2つのテーブルで外部キーとして参照されているため、他の2つのテーブルに外部キー制約をドロップする必要があります。
また、現在のテーブルにはインデックスを削除する必要があります。
どうすればいいですか?
インデックスと外部キーの名前は、sys
テーブルから取得する必要があります。それらをドロップする構文は次のとおりです。
外部キー
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[foreign_key_index_name]') AND parent_object_id = OBJECT_ID(N'[dbo].[tablename]'))
ALTER TABLE [dbo].[tablename] DROP CONSTRAINT [foreign_key_index_name]
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[tablename]') AND name = N'index_name')
DROP INDEX [index_name] ON [dbo].[tablename] WITH (ONLINE = OFF)
インデックスは、この情報は、BOLでもご覧になれます。
select * from sys.indexes where object_id = object_id(N'[dbo].[tablename]')
select * from sys.foreign_keys where parent_object_id = object_id(N'[dbo].[tablename]')
答えをありがとう。実際にインデックスと制約を削除せずに列データ型を変更できますか?代わりに無効にすることはできますか? – user1274655
私が知る限り、列のデータ型を変更するためにテーブルを再作成する必要があります。つまり、テーブル、インデックス、外部キーを削除して再作成する必要があります。 SSMS(SQL Server Management Studio)を使用して列の種類を変更すると、操作全体がスクリプトされます。私が見た1つの問題は、テーブルにデータが入ってからカラムが 'not null'に変更されたときです。カラムをデフォルトにバインドしないか、スクリプトを編集してフィールドをスクリプトがデータを一時表から新しく作成された表に転送するときは、非NULL値。 –
はなぜこれを行うにはSSMSを使用します。あなたはこれらのクエリとインデックスと外部キーの名前を見つけることができます
? –