SQLServerではインデックスに含まれるカラムを変更するとエラーになる場合があります

データベース

はじめに

既存テーブルのカラムの型やサイズを変更する場合、ALTER文を使用します

SQL Server

ALTER TABLE [table_name] ALTER COLUMN [column_name] VARCHAR(100)

PostgreSQL

ALTER TABLE "table_name" ALTER COLUMN "column_name" VARCHAR(100)

MySQL

ALTER TABLE `table_name` MODIFY `column_name` VARCHAR(100)

いずれも型をVARCHAR(100)に変更しています
特に問題は起きませんが、変更しようとするカラムがインデックスに含まれており、かつサイズを小さくする場合、SQL Serverではエラーが発生します
(PostgreSQLとMySQLではインデックスに含まれていても正常に変更できます)

インデックス ‘index_name’ は 列 ‘column_name’ に依存しています。 ALTER TABLE ALTER COLUMN column_name は失敗しました。1 つ以上のオブジェクトがこの 列 を参照しています。

この場合、あらかじめインデックスを削除し、再度インデックスを作成する必要があります

BEGIN TRANSACTION 
DROP INDEX [index_name] ON [table_name] 
ALTER TABLE [table_name] ALTER COLUMN [column_name] VARCHAR(100) 
CREATE NONCLUSTERED INDEX [index_name] ON [table_name]([column_name]) COMMIT TRANSACTION
タイトルとURLをコピーしました