以下查询是转换字段数据类型的可接受方式吗?
UPDATE INFORMATION_SCHEMA.COLUMNS
SET `COLUMNS`.`DATA_TYPE` = 'tinyint'
WHERE
`COLUMNS`.`TABLE_SCHEMA` = 'BAR'
AND `COLUMNS`.`TABLE_NAME` = 'FOO'
AND `COLUMNS`.`DATA_TYPE` = 'bit'
我应该关注数据完整性还是将存储为 bit 的数据毫无问题地转移到 tinyint?
这不行。INFORMATION_SCHEMA 数据库上不允许操作 UPDATE、DELETE、INSERT。
您不能直接修改元数据表(它们实际上是视图,但在这种情况下区别并不重要),但您可以使用它们来生成您的 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'