首页 > 解决方案 > 如何从返回的列表中更新 SQL 中的数据类型

问题描述

我创建了一个数据库,并意识到在一大堆表中都有nvarchar(255)数据类型的地方犯了一个错误。他们应该是日期时间。我试图通过运行一个简单的代码来修改所有这些。

首先,我运行下面的代码来识别所有表和其中包含“日期”一词的相关列名,因为我知道这些是需要更改数据类型的列:

select * 
from MyDatabase.INFORMATION_SCHEMA.COLUMNS c 
where c.COLUMN_NAME like '%date%'

我查看了列表并确认所有列中都没有任何数据。只有其中一些有 NULL 。如果需要,我可以删除这些数据。返回列表中也只有 3 个不能为 Null;其余的都可以为 Null。如果重要的话,我可以手动修改不可为空的。

我想像运行这样的代码:

select * 
from MyDatabase.INFORMATION_SCHEMA.COLUMNS c 
where c.COLUMN_NAME like '%date%' and c.IS_NULLABLE = 'yes'

ALTER COLUMN c.COLUMN_NAME LIKE '%date%' DATETIME [NULL] -- for the Nullable items

使用上面的代码,我试图使用以下链接中的逻辑: 如何更改 SQL Server 中列的数据类型?

不过,我知道我的上述实现是不正确的。谁能帮助我以正确的方式?提前致谢

标签: sqllisttypes

解决方案


在mysql中你可以这样做。在其他sql数据库服务中也可以达到同样的效果,只是语法可能不同。

select CONCAT('ALTER TABLE ', c.TABLE_NAME, ' MODIFY COLUMN ', c.COLUMN_NAME, ' 
DATETIME;') 
from INFORMATION_SCHEMA.COLUMNS c 
where c.COLUMN_NAME like '%date%' and c.TABLE_SCHEMA='database_name'

基本上,您正在检索所有带有 date 一词的列,然后使用该CONCAT函数来构建更改查询。然后,您只需要运行生成的查询。


推荐阅读