Je suis étudiant en RDBMS.
J'ai une question très basique, disons que j'ai une table existante dans SQL Server. Quel sera le script pour modifier la table.
Dans SQL Server 2005 ou version ultérieure, vous pouvez utiliser ce 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
Bien sûr, ce script peut toujours échouer si d'autres tables font référence à ce dbo.YourTable
en utilisant des contraintes de clé étrangère sur la colonne RowId
préexistante ...
Mise à jour: et bien sûr, partout où j'utilise dbo.YourTable
ou PK_YourTable
, vous devez remplacer ces espaces réservés par les noms de table/contrainte réels de votre propre base de données (vous n'avez pas mentionné ce qu'ils étaient, dans votre question .....)
Remarque: cette réponse a été ajoutée avant la mise à jour des questions
Exemple de script:
CREATE TABLE whatever (
OldPKColumn uniqueidentifier NOT NULL,
CONSTRAINT PK_whatever PRIMARY KEY (OldPKColumn)
)
ALTER TABLE whatever
ADD RowId int NOT NULL IDENTITY (1,1);
ALTER TABLE whatever
DROP CONSTRAINT PK_whatever;
ALTER TABLE whatever WITH CHECK
ADD CONSTRAINT PK_whatever PRIMARY KEY CLUSTERED (RowId);
ALTER TABLE whatever
DROP COLUMN oldPKcolumn;
Et une pensée aléatoire ... essayez-vous de réinitialiser une colonne IDENTITY?
Si oui, utilisez alors DBCC CHECKIDENT
Juste un commentaire pour améliorer ces bonnes réponses (je ne peux pas encore utiliser les commentaires - je suis à un point de réputation de ce privilège) et comme référence future pour moi-même:
Une nouvelle colonne IDENTITY (numéro automatique) peut être ajoutée et transformée en clé primaire dans une seule instruction:
ALTER TABLE [TableName] ADD [ColumnName] int IDENTITY PRIMARY KEY;
Je préfère ne pas me soucier des noms de contraintes lorsque cela n'aide pas.
Vous pouvez spécifier des valeurs seed (et increment) entre parenthèses après le mot clé IDENTITY
.