SQL Server 2005 以降では、次のスクリプトを使用できます:
-- 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
もちろん、他のテーブルがこの dbo.YourTable
を参照している場合、このスクリプトは失敗する可能性があります。 既存の RowId
に外部キー制約を使用する 列...
更新: そしてもちろん 、 dbo.YourTable
を使用する場所ならどこでも または PK_YourTable
、これらのプレースホルダーを 実際の に置き換える必要があります 独自のデータベースからのテーブル/制約名 (質問では、それらが何であるかについて言及していませんでした.....)