2

以下查询是转换字段数据类型的可接受方式吗?

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?

4

2 回答 2

1

这不行。INFORMATION_SCHEMA 数据库上不允许操作 UPDATE、DELETE、INSERT。

这就是为什么。

于 2016-12-16T13:59:28.703 回答
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 回答