TSQL Alter主键群集索引MSSQL2008r2

TSQL Alter主键群集索引MSSQL2008r2,tsql,sql-server-2008-r2,indexing,primary-key,clustered-index,Tsql,Sql Server 2008 R2,Indexing,Primary Key,Clustered Index,是否可以在不丢失数据的情况下更改现有表上的主键聚集索引 如果是这样的话,请问ALTER命令是什么 编辑 我想在主键聚集索引中添加一列 谢谢以下是我过去在更改表主键时所做的操作: BEGIN TRANSACTION doStuff DECLARE @isValid bit SET @isValid = 1 DECLARE @pkName varchar(50) SET @pkName = ( SELECT TOP 1 name FROM sys.key_cons

是否可以在不丢失数据的情况下更改现有表上的主键聚集索引

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

编辑
我想在主键聚集索引中添加一列


谢谢

以下是我过去在更改表主键时所做的操作:

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

注意:如中所述:这将在整个操作过程中对表中的数据重新排序,因此根据表的大小,可能需要花费大量时间。

您试图更改什么?组成主键的列?我想在主键聚集索引中添加一个附加列否,不可能直接更改约束定义。ALTER TABLE仅允许添加或删除约束,而不允许更改其定义。此外,约束由索引支持。如果您查看,您将看到无法更改索引中包含的列。但是删除和添加约束不应该导致丢失实际数据。谢谢。这将如何影响同一表上的非聚集索引?他们会同时重建吗?对集群键的任何更改都会强制在创建新的聚集索引后重建所有非聚集索引。