TSQL Alter主键群集索引MSSQL2008r2
是否可以在不丢失数据的情况下更改现有表上的主键聚集索引 如果是这样的话,请问ALTER命令是什么 编辑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
我想在主键聚集索引中添加一列
谢谢以下是我过去在更改表主键时所做的操作:
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仅允许添加或删除约束,而不允许更改其定义。此外,约束由索引支持。如果您查看,您将看到无法更改索引中包含的列。但是删除和添加约束不应该导致丢失实际数据。谢谢。这将如何影响同一表上的非聚集索引?他们会同时重建吗?对集群键的任何更改都会强制在创建新的聚集索引后重建所有非聚集索引。