En SQL Server 2005 o posterior, puede utilizar este script:
-- drop PK constraint if it exists
IF EXISTS (SELECT * FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('dbo.YourTable') AND Name = 'PK_YourTable')
ALTER TABLE dbo.YourTable
DROP CONSTRAINT PK_YourTable
GO
-- drop column if it already exists
IF EXISTS (SELECT * FROM sys.columns WHERE Name = 'RowId' AND object_id = OBJECT_ID('dbo.YourTable'))
ALTER TABLE dbo.YourTable DROP COLUMN RowId
GO
-- add new "RowId" column, make it IDENTITY (= auto-incrementing)
ALTER TABLE dbo.YourTable
ADD RowId INT IDENTITY(1,1)
GO
-- add new primary key constraint on new column
ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable
PRIMARY KEY CLUSTERED (RowId)
GO
Por supuesto, este script puede todavía fallar, si otras tablas hacen referencia a este dbo.YourTable
usando claves foráneas en el pre RowId
columna existente ...
actualización: y por supuesto, cualquier uso o dbo.YourTable
PK_YourTable
, usted tiene que reemplazar aquellos marcador de posición con los nombres de tabla /restricciones reales a partir de su propia base de datos (que no mencionó lo que eran, en su pregunta .....)
Dejar una columna y eliminar una restricción de clave primaria son cosas diferentes. Su primera línea no está clara. ¿Puedes publicar tu intento de esto y explicar dónde estás atascado? – Oded
¿Qué es lo que realmente quieres? –
¿No desea conservar el RowId "viejo" hasta que se complete toda la secuencia? ¿Se espera que este "antiguo" RowId sea IDENTIDAD también? ¿Por qué reemplazar una columna por una del mismo nombre? – gbn