将许多字段的 data_type 从 bit 转换为 tinyint
Posted
技术标签:
【中文标题】将许多字段的 data_type 从 bit 转换为 tinyint【英文标题】:Converting data_type of many fields from bit to tinyint 【发布时间】:2012-05-19 16:06:01 【问题描述】:以下查询是转换字段数据类型的可接受方式吗?
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?
【问题讨论】:
好吧,如果数据完整性没有问题,我可以一口气把我所有的表都改得这么好...... 成功了吗?计划做同样的事情。 无法确认安全性所以没有这样做。 【参考方案1】:这样不行。不允许在 INFORMATION_SCHEMA 数据库上执行 UPDATE、DELETE、INSERT 操作。
Here's why.
【讨论】:
【参考方案2】:您不能直接修改元数据表(它们实际上是视图,但在这种情况下区别并不重要),但您可以使用它们来生成您的 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'
【讨论】:
以上是关于将许多字段的 data_type 从 bit 转换为 tinyint的主要内容,如果未能解决你的问题,请参考以下文章
如何在sql server中把数据库中的日期字段转换为短日期格式