2012-04-27 10 views
0

列のデータ型を変更したい。外部キー制約とインデックスを無効にする前に列のデータ型を変更する

この列は他の2つのテーブルで外部キーとして参照されているため、他の2つのテーブルに外部キー制約をドロップする必要があります。

また、現在のテーブルにはインデックスを削除する必要があります。

どうすればいいですか?

+0

はなぜこれを行うにはSSMSを使用します。あなたはこれらのクエリとインデックスと外部キーの名前を見つけることができます

? –

答えて

0

インデックスと外部キーの名前は、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]') 
+0

答えをありがとう。実際にインデックスと制約を削除せずに列データ型を変更できますか?代わりに無効にすることはできますか? – user1274655

+0

私が知る限り、列のデータ型を変更するためにテーブルを再作成する必要があります。つまり、テーブル、インデックス、外部キーを削除して再作成する必要があります。 SSMS(SQL Server Management Studio)を使用して列の種類を変更すると、操作全体がスクリプトされます。私が見た1つの問題は、テーブルにデータが入ってからカラムが 'not null'に変更されたときです。カラムをデフォルトにバインドしないか、スクリプトを編集してフィールドをスクリプトがデータを一時表から新しく作成された表に転送するときは、非NULL値。 –

関連する問題