是否可以在不丢失数据的情况下更改现有表上的PRIMARY KEY CLUSTERED索引?
如果是这样,请问ALTER命令是什么?
EDIT 我想在PRIMARY KEY CLUSTERED Index
中添加一个额外的列由于
答案 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这将在整个操作过程中对表中的数据进行重新排序,因此根据表的大小,可能需要花费大量时间。