はじめに
既存テーブルのカラムの型やサイズを変更する場合、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