nvarchar/ nchar
からvarchar/char
にすべての列の種類を更新するために使用できるクエリテキストを生成するには、sqlserver query
があります。インデックスsqlserverに列が存在するかどうかをテストします
SELECT
AlterSql = CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' ALTER COLUMN ', COLUMN_NAME, ' ', SUBSTRING(DATA_TYPE, 2, LEN(DATA_TYPE)), '(', CHARACTER_MAXIMUM_LENGTH, ') ', CASE IS_NULLABLE WHEN 'YES' THEN 'NULL' WHEN 'NO' THEN 'NOT NULL' ELSE 'ERROR' END, CHAR(13), CHAR(10), 'GO')
, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('nchar', 'nvarchar')
問題を実行すると、インデックスに列がキャストできないというエラーが表示されます。
インデックスが存在するかどうかをテストし、インデックスを削除し、インデックスを作成して再作成する必要があります。
スクリプトを変更するにはどうすればよいですか? どうもありがとう
なぜncharまたはnvarcharのすべての単一の列を対応する列に変換しようとしていますか?システムに格納できるデータを制限しており、潜在的に情報を失う可能性があります。 –
空き領域を解放することは、格納可能なデータを制限する有効な理由ではありません。あなたが100%以上のASCII文字セット以外の値を受け取ったことがないと確信していない限り、これは単なるひどい考えです。 –