2016-12-01 55 views
2

我有一种情况,需要将不同表中的列从INT更改为BIGINT。问题是这些表中有一些表中有约束,索引,键和数据;其中一些相互关联。 我创建了一系列的步骤来完成这项工作,我会很感激你的意见。在不同的表中将列从INT更改为BIGINT

  1. 确定表中的列。 SELECT SCHEMA_NAME(schema_id)AS schema_name,t.name AS table_name,c.name AS column_name FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID WHERE 1 = 1 AND c.name LIKE' %columnname%'ORDER BY schema_name,table_name;

  2. 选取一个表并生成脚本来创建和删除每个约束,键和索引。

  3. 创建一个与摘取表具有相同结构的新表,但将所需列作为BIGINT而不是INT创建。

  4. 将旧表中的行插入到新表中。

  5. 为旧表中的每个约束,键和索引运行DROP脚本。

  6. 删除旧表中的所有行。

  7. 更改旧表以将所需的列从INT修改为BIGINT。

  8. 为旧表中的每个约束,键和索引运行CREATE脚本。

  9. 将新表中的行插入到旧表中。

  10. 转到第2步,选择另一个表并重复。

您认为这是一个很好的计划吗?我也很感激任何有关备份计划的建议。

回答

1

为什么不改变你的列数据类型?转换INT -> BIGINT不应该有任何问题

ALTER TABLE dbo.yourTable 
    ALTER COLUMN yourColumnName BIGINT 
+0

表有它的一定限制,数据和索引,我不能只是简单地改变数据类型。 – Liohn

+0

什么约束会导致你的问题?外键不介意INT或BIGINT。索引不应该是一个问题,索引只会被重建。 –

+0

真的吗?那么现有的数据呢,是不是变革的问题? – Liohn