【问题标题】:How to update data types in SQL from a returned list如何从返回的列表中更新 SQL 中的数据类型
【发布时间】:2021-09-29 02:54:53
【问题描述】:

我创建了一个数据库并意识到犯了一个错误,其中一大堆表中都有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

通过上面的代码,我尝试使用以下链接中的逻辑: How do you change the datatype of a column in SQL Server?

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

【问题讨论】:

标签: sql list types


【解决方案1】:

在 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 函数构建更改查询。然后,您只需要运行生成的查询。

【讨论】:

  • 谢谢。我不得不稍微修改一下代码:
  • 谢谢。我不得不修改: Select (Select CONCAT('ALTER TABLE ',c.TABLE_NAME,' ALTER COLUMN ',c.COLUMN_NAME,' datetime;')) From INFORMATION_SCHEMA.COLUMNS c WHERE C.COLUMN_NAME LIKE '%date%' 和c.TABLE_NAME='options' -- 这是为了关注选项表我添加了缺少的 SELECT。另外由于我的版本,我使用了 ALTER COLUMN 而不是 MODIFY COLUMN。代码返回以下结果: ALTER TABLE Options MODIFY COLUMN createdat DATETIME;所以代码很好,但它只是显示代码;它没有执行它
  • 是的,您只需要复制生成的代码并运行它。很简单
  • 哈哈太棒了。我实际上尝试添加 Execute 函数来运行所有这些字符串,但实际上并没有考虑用鼠标选择它们并执行。非常感谢:)
  • 没问题! :)
猜你喜欢
  • 2010-12-08
  • 2019-09-06
  • 2021-02-14
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2010-10-12
相关资源
最近更新 更多