我有一种情况,需要将不同表中的列从INT更改为BIGINT。问题是这些表中有一些表中有约束,索引,键和数据;其中一些相互关联。 我创建了一系列的步骤来完成这项工作,我会很感激你的意见。在不同的表中将列从INT更改为BIGINT
确定表中的列。 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;
选取一个表并生成脚本来创建和删除每个约束,键和索引。
创建一个与摘取表具有相同结构的新表,但将所需列作为BIGINT而不是INT创建。
将旧表中的行插入到新表中。
为旧表中的每个约束,键和索引运行DROP脚本。
删除旧表中的所有行。
更改旧表以将所需的列从INT修改为BIGINT。
为旧表中的每个约束,键和索引运行CREATE脚本。
将新表中的行插入到旧表中。
转到第2步,选择另一个表并重复。
您认为这是一个很好的计划吗?我也很感激任何有关备份计划的建议。
表有它的一定限制,数据和索引,我不能只是简单地改变数据类型。 – Liohn
什么约束会导致你的问题?外键不介意INT或BIGINT。索引不应该是一个问题,索引只会被重建。 –
真的吗?那么现有的数据呢,是不是变革的问题? – Liohn