2012-05-11 1 views
2

다음 쿼리는 필드의 data_type을 변환 할 수있는 적합한 방법입니까?많은 필드의 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

글쎄, 데이터 무결성에 문제가 없다면이 모든 테이블을 한꺼번에 변경할 수 있습니다. – jerrygarciuh

+0

작동 했습니까? 같은 일을 계획하고 있습니다. – sanya

+0

안전을 확인할 수 없으므로하지 않았습니다. – jerrygarciuh

답변

1

직접 메타 데이터 테이블을 수정할 수 없습니다 (실제로 뷰있어하지만 구별이 경우에 중요하지 않습니다)하지만 당신은 당신의 테이블 변경 문을 생성하는 데 사용할 수 있습니다, 이런 식으로 뭔가 :

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.