Je suis étudiant de RDBMS.
J'ai une question très basique disons que j'ai une table existante dans le server SQL. Quel sera le script pour modifier la table.
Dans SQL Server 2005 ou plus récent, 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 referencent ce dbo.YourTable
utilisant des contraintes de key é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 replace ces espaces réservés par les noms réels de table / contrainte de votre propre database (vous n'avez pas mentionné ce qu'ils étaient, dans votre question ….. )
Note: 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 random … essayez-vous de réinitialiser une colonne IDENTITY?
Si oui, utilisez DBCC CHECKIDENT
Juste un commentaire pour améliorer ces excellentes réponses (je ne peux pas encore utiliser les commentaires – je suis un sharepoint réputation loin de ce privilège) et comme reference future pour moi-même:
Une nouvelle colonne IDENTITY (autonumber) peut être ajoutée et créée la key primaire dans une seule instruction:
ALTER TABLE Quel que soit ADD RowID int IDENTITY NOT NULL PRIMARY KEY;
Je préfère ne pas m'embêter avec des noms de contraintes quand ça ne sert à rien.