将许多字段的 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中把数据库中的日期字段转换为短日期格式

SQL Server 2012 如何将列的数据类型从位更改为日期字段?

ODBC 链接表将 Tinyint 字段转换为是/否

插入oracle的long类型,报字符串过长怎么解决

nvarchar 值转换为数据类型为 int 发生语法错误

PDOStatement::bindParam data_type 参数列表