T SQL Alter PRIMARY KEY Clustered Index MSSQL 2008 r2

时间:2014-09-18 13:59:51

标签: tsql sql-server-2008-r2 indexing primary-key clustered-index

是否可以在不丢失数据的情况下更改现有表上的PRIMARY KEY CLUSTERED索引?

如果是这样,请问ALTER命令是什么?

EDIT 我想在PRIMARY KEY CLUSTERED Index

中添加一个额外的列

由于

1 个答案:

答案 0 :(得分:1)

以下是我过去在桌面上更改主键所做的事情:

BEGIN TRANSACTION doStuff

DECLARE @isValid bit
SET     @isValid = 1

DECLARE @pkName varchar(50)
SET     @pkName = (
    SELECT TOP 1 name
    FROM sys.key_constraints
    WHERE type ='pk'
        AND OBJECT_NAME(parent_object_id) = N'TableName'
)

DECLARE @sql nvarchar(2000)
SET @sql = N'
ALTER TABLE dbo.TableName
DROP CONSTRAINT ' + @pkName

EXEC (@sql)

IF (@@ERROR <> 0)
    BEGIN
        PRINT 'Error deleting primary key'
        SET @isValid = 0
    END

ALTER TABLE dbo.TableName
ADD PRIMARY KEY (primary key columns separated by comma)

IF (@@ERROR <> 0)
    BEGIN
        PRINT 'Error creating primary key'
        SET @isValid = 0
    END

IF (@isValid = 1)
    BEGIN
        PRINT 'Commit'
        COMMIT TRANSACTION doStuff
    END
ELSE
    BEGIN
        PRINT 'Rollback'
        ROLLBACK TRANSACTION doStuff
    END

请注意:Best way to change clustered index (PK) in SQL 2005这将在整个操作过程中对表中的数据进行重新排序,因此根据表的大小,可能需要花费大量时间。