web-dev-qa-db-ja.com

データベース全体で列のデータ型を変更する

データ型ntextの多くの列を持つテーブルがたくさんあります。 計画されている非推奨(編集:できるため、特定のデータベースのすべてのテーブルのそのようなすべての列をnvarchar(max)に変更したいDISTINCTGROUP BYなどでこのような列を使用しないでください)。各テーブルでALTER TABLEALTER COLUMNと手動で使用せずにこれを達成することは可能ですか?

MS SQL Server 2008を使用しています。

4

いいえ、ここには魔法や手を振るものはありません。類義語が型に適用されるといいのですが、そうではありません。これらの列を一流の市民にする場合は、テーブルを変更する必要があります。これはある程度自動化できますが、「手動」で正確に何を意味するのか、なぜこれが避けたい大きな負担になると思われるのかを指定しない限り、これを助けるためのコードは掲載しません。

これを自動化するには、次のようにします。

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += CHAR(13) + CHAR(10) + N'ALTER TABLE '
  + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
  + '.' + QUOTENAME(OBJECT_NAME([object_id])) 
  + ' ALTER COLUMN ' + QUOTENAME(name) + ' NVARCHAR(MAX)'
  + CASE is_nullable WHEN 0 THEN ' NOT NULL;' ELSE ';' END
FROM sys.columns
WHERE system_type_id = 99;

PRINT @sql;

-- EXEC sp_executesql @sql;

そうは言っても、おそらくこれらの列を別個の/グループ化で使用したくないでしょう。

5
Aaron Bertrand

いいえ、列の種類を変更する場合は、ALTER COLUMNステートメントを使用する必要があります。まあ、それは真実ではありません-テーブルを削除して再作成できます-しかし、ALTER COLUMNは明らかに優れています

0
Derek Kromm