2

次のクエリは、フィールドの data_types を変換するための適切な方法ですか?

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 に移動しますか?

4

2 に答える 2

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'
于 2016-12-16T14:16:14.817 に答える
1

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

理由は次のとおりです。

于 2016-12-16T13:59:28.703 に答える