【问题标题】:Change datatype of entire database SQL更改整个数据库 SQL 的数据类型
【发布时间】:2015-07-10 20:52:16
【问题描述】:

我正在尝试将数据类型从 float 更改为 decimal(30,10)。问题是我有一个包含 300 多个表的大型数据库,它们都受到索引和连接的约束。

谁能帮我用快捷方式更改整个数据库中的数据类型?

我正在使用 SQL Server Management Studio 2012。

【问题讨论】:

  • 我不认为寻找捷径来改变众多列的数据类型是最明智的想法。
  • 这里没有快捷方式。只是很多痛苦的工作。
  • 您可以将表定义导出为 SQL 'CREATE TABLE' 语句,然后将数据卸载为 INSERT 语句或平面文件。然后使用文本编辑器对所有出现的小数(30,10)进行多次更改。然后重建数据库然后从 SQL 转储文件重建索引,观察任何数据错误。

标签: sql sql-server-2012 type-conversion


【解决方案1】:

您可以使用存储有关表和列的元数据的内部系统表来生成您的ALTER TABLE 语句。

SELECT 'ALTER TABLE ' + OBJECT_NAME(c.object_id) + ' ALTER COLUMN ' + c.name + ' DECIMAL(30,10);' AS sqlCommand
FROM sys.columns AS c
INNER JOIN sys.types AS t ON t.system_type_id=c.system_type_id
WHERE t.name='float';

这将返回一个结果集,然后您可以将其粘贴回管理工作室查询窗口并执行。或者,您可以通过sp_executesql 自动运行语句以将它们作为动态 SQL 运行,但在这些大规模更新的情况下,我通常喜欢检查我将要运行的语句。

请注意:这不会检查这些语句是否都会成功。它只会生成必要的 DDL 语句来修改表。如果这些列中的任何一个是主键或外键,那么它将失败。我敢肯定,还有许多其他情况也可能会失败。运行自动生成的语句后,请务必检查所有输出消息以了解实际发生的情况。

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 2023-02-09
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多