2012-05-11 2 views
2

次のクエリは、フィールドのdata_typesを変換するのに適した方法ですか?多くのフィールドのdata_typeをbitからtinyintに変換する

UPDATE INFORMATION_SCHEMA.COLUMNS 
SET `COLUMNS`.`DATA_TYPE` = 'tinyint' 
WHERE 
`COLUMNS`.`TABLE_SCHEMA` = 'BAR' 
AND `COLUMNS`.`TABLE_NAME` = 'FOO' 
AND `COLUMNS`.`DATA_TYPE` = 'bit' 

データの整合性を心配する必要がありますか、またはビットとして保存されたデータを問題なくtinyintに移動しますか?

+0

データの整合性に問題がなければ、1つの膨らみの中で私のすべてのテーブルを変更することができます。 – jerrygarciuh

+0

それは機能しましたか?同じことを計画しています。 – sanya

+0

これの安全を確認できませんでした。 – jerrygarciuh

答えて

1

あなたが直接メタデータ表を変更することはできません(彼らが実際のビューだが、区別はこの場合のために重要ではありません)しかし、あなたがあなたのALTER TABLE文を生成するためにそれらを使用することができ、このような何か:

SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME + ' ALTER COLUMN ' + COLUMN_NAME + ' TINYINT' + CASE WHEN IS_NULLABLE = 'YES' THEN ' NULL;' ELSE ' NOT NULL;' END 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE `COLUMNS`.`TABLE_SCHEMA` = 'BAR' 
AND `COLUMNS`.`TABLE_NAME` = 'FOO' 
AND `COLUMNS`.`DATA_TYPE` = 'bit' 
1

これは行いません。操作UPDATE、DELETE、INSERTはINFORMATION_SCHEMAデータベースでは許可されません。

Here's why.

関連する問題