Trong SQL Server 2005 hoặc mới hơn, bạn có thể sử dụng tập lệnh này:
-- 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
Tất nhiên, tập lệnh này vẫn có thể không thành công, nếu các bảng khác đang tham chiếu đến dbo.YourTable
này sử dụng các ràng buộc khóa ngoại đối với RowId
đã có từ trước cột ...
Cập nhật: và tất nhiên , ở bất cứ đâu tôi sử dụng dbo.YourTable
hoặc PK_YourTable
, bạn phải thay thế các trình giữ chỗ đó bằng thực tế bảng / tên ràng buộc từ cơ sở dữ liệu của riêng bạn (bạn không đề cập đến chúng là gì, trong câu hỏi của bạn .....)