我有一张包含数百万行数据的表。震惊,恐怖 - 加载数据的脚本(需要很长时间才能运行)已经混淆了两列。第一列的数据位于第二列,反之亦然。
似乎最简单的修改方法是重命名列(我不关心列的顺序)。但是,使用sp_rename太聪明了,并且更新了已经引用正确列的索引。
有没有人知道实现这种交换的快捷方式?
下面的脚本演示了这个问题。
CREATE TABLE MyTable (
col1 INT NOT NULL,
col2 INT NOT NULL,
col3 INT NOT NULL
)
GO
CREATE NONCLUSTERED INDEX MyIndex ON MyTable(col1, col3)
GO
到目前为止一切顺利。现在假设数据加载已经完成,我们意识到数据位于不正确的列中。所以我运行以下脚本:
sp_rename 'MyTable.col1', 'col1ToCol2', 'COLUMN'
GO
sp_rename 'MyTable.col2', 'col1', 'COLUMN'
GO
sp_rename 'MyTable.col1ToCol2', 'col2', 'COLUMN'
GO
列按预期“交换”。但是,在检查索引MyIndex时,其中的列现在是col2和col3,而不是我想要和需要的col1和col3。
我希望丢弃并重新创建索引会非常昂贵。
总之,如何在我处理非常大的索引表的两列中“交换”数据?具体来说,使用SQL Server 2008R2
感谢。