W SQL Server 2005 lub nowszy, można użyć tego skryptu:
-- 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
Oczywiście skrypt ten może zakończyć się niepowodzeniem, jeśli inne tabele przedstawieniu tej dbo.YourTable
użyciu kluczy obcych na przed- istniejących RowId
kolumnę ...
Aktualizacja: i oczywiście, gdziekolwiek używam dbo.YourTable
lub PK_YourTable
, trzeba wymienić tych zastępczy z rzeczywistych nazw tabeli/więzów z własnej bazy danych (nie wspominając, co byli w swoje pytanie .....)
Upuszczanie kolumny i usuwanie ograniczenia klucza podstawowego to różne rzeczy. Twoja pierwsza linia nie jest jasna. Czy możesz również opublikować swoją próbę i wyjaśnić, gdzie utknąłeś? – Oded
Czego naprawdę chcesz? –
Czy nie chcesz zachować "starego" wiersza, dopóki cała sekwencja nie zostanie ukończona? Czy ten "stary" identyfikator RowId powinien również być TOŻSAMOŚCI? Po co zastępować kolumnę jedną z tych samych nazw? – gbn