SQL सर्वर 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
, आपको उन प्लेसहोल्डर को वास्तविक . से बदलना होगा अपने स्वयं के डेटाबेस से तालिका/बाधा नाम (आपने अपने प्रश्न में उल्लेख नहीं किया कि वे क्या थे .....)