重命名表而不更改索引

时间:2018-02-15 11:40:27

标签: sql-server tsql

我有一张包含数百万行数据的表。震惊,恐怖 - 加载数据的脚本(需要很长时间才能运行)已经混淆了两列。第一列的数据位于第二列,反之亦然。

似乎最简单的修改方法是重命名列(我不关心列的顺序)。但是,使用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

感谢。

0 个答案:

没有答案