je možné ALTER PRIMARY KEY CLUSTERED index na existujúcej tabuľke bez straty dát?
Ak áno, aký je príkaz ALTER?
EDIT Chcem pridať ďalší stĺpec do PRIMARY KEY CLUSTERED Index
Vďaka
odpovede:
1 pre odpoveď č. 1Tu je to, čo som urobil v minulosti na zmenu primárneho kľúča v tabuľke:
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
Upozornenie: Najlepší spôsob, ako zmeniť klastrovaný index (PK) v SQL 2005 toto bude preorientovať údaje v tabuľke počas operácie, takže v závislosti od veľkosti tabuľky by to mohlo trvať značné množstvo času.