すべてのテーブルでデータ型をからに一度に変更しようとしてtext
います。varchar
このクエリ
select *
from information_schema.columns
where data_type = 'text'
すべてのtext
データ型が表示されますが、これを使用して型をに変更するにはどうすればよいですかvarchar
。
すべてのテーブルでデータ型をからに一度に変更しようとしてtext
います。varchar
このクエリ
select *
from information_schema.columns
where data_type = 'text'
すべてのtext
データ型が表示されますが、これを使用して型をに変更するにはどうすればよいですかvarchar
。
すべてのtext
、ntext
およびimage
データ型を新しいvarchar(max)
、nvarchar(max)
およびvarbinary(max)
データ型に変更します。
select 'alter table ' + quotename(c.TABLE_SCHEMA) + '.' + quotename(c.TABLE_NAME)
+ ' alter column ' + quotename(c.COLUMN_NAME) + ' '
+ case c.DATA_TYPE when 'image' then 'varbinary(max)' when 'ntext' then 'nvarchar(max)' when 'text' then 'varchar(max)' end + ' '
+ case c.IS_NULLABLE when 'YES' then 'not' else '' end + ' null;' as SqlCommand
, *
from INFORMATION_SCHEMA.COLUMNS c
join INFORMATION_SCHEMA.TABLES t on c.TABLE_CATALOG = t.TABLE_CATALOG
and c.TABLE_SCHEMA = t.TABLE_SCHEMA
and c.TABLE_NAME = t.TABLE_NAME
where c.DATA_TYPE in ('image', 'ntext', 'text')
and t.TABLE_TYPE = 'BASE TABLE'
SqlCommand列をバッチとしてコピーして実行するだけです。
これにより、null可能性とフィルターアウトビューが処理されます。
text / ntext / image列にタイプ固有の制約を設定できるとは思わないので、おそらくPK / FK/UKをチェックする必要はありません。ただし、他のタイプの制約とデフォルトを考慮する必要があります。それらがたくさんある場合は、SSMSダイアグラムモードでこれらの変更を行う方が簡単な場合があります。
クエリ結果からこれらのコマンドをコピーして実行します。
select
cmd = 'alter table [' + c.table_schema + '].[' + c.table_name + '] alter column [' + c.column_name + '] varchar(<yoursize>)'
,*
from information_schema.columns c
where c.data_type='text'
だが:
最初は、次のように単純に見えるかもしれません。
ただし、最初にこれらの列のインデックス、外部キー制約などを削除する必要があります。その後、完了したら、制約とインデックスを再作成できます。
このSOの質問を参照してください: