2012-05-11 79 views
2

以下查詢是可接受的方式來轉換字段的data_types嗎?將多個字段的data_type從位轉換爲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

那麼,如果沒有數據完整性的問題,我可以在一個膨脹的foop中更改我的所有表格... – 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

這不行。在INFORMATION_SCHEMA數據庫上不允許執行UPDATE,DELETE,INSERT操作。

Here's why.