Ajouter une nouvelle colonne à une table existante, avec une valeur égale à l'ID

Dans ma database dans une instance sql-server 2005, j'ai besoin d'append une nouvelle colonne à une table avec des données existantes. La table ressemble à ceci:

CREATE TABLE [dbo].[Status]( [Status_ID] [int] IDENTITY(1,1) NOT NULL, [Description] [nvarchar](80) COLLATE Latin1_General_CI_AS NOT NULL ) 

La colonne que je veux append est également de type INT et les valeurs nulles ne sont pas autorisées. De plus, je veux que les valeurs initiales de cette colonne soient égales à l'ID (il ne peut s'agir d'une colonne calculée).

C'est le script que j'ai écrit pour ceci:

 ALTER TABLE [dbo].[Status] add Status_Code int NOT NULL DEFAULT 1 GO //Get the number of rows DECLARE @RowCount INT SET @RowCount = (SELECT COUNT(Status_ID) FROM Status) //Create an iterator DECLARE @I INT SET @I = 1 //Loop through the rows of a table @myTable WHILE (@I <= @RowCount) BEGIN UPDATE Status SET Status_Code = @I WHERE Status_ID = @I //Increment the iterator SET @I = @I + 1 END 

Ce script semble fonctionner parfaitement. Cependant, il semble que beaucoup de code pour une tâche plutôt petite. Est-ce que quelqu'un sait d'une manière plus efficace de coder ceci?

Pourquoi faire une boucle dans la table pour faire la mise à jour? Fais juste ceci:

 ALTER TABLE [dbo].[Status] add Status_Code int NOT NULL DEFAULT 1 UPDATE Status SET Status_Code = Status_ID 

Créez la nouvelle colonne et rendez-la nullable.

Ensuite, écrivez une instruction de mise à jour simple pour insert les identifiants existants dans les nouvelles colonnes.

Ensuite, rendez votre colonne non-nullable.

J'irais avec la réponse de Gerrie comme vous voulez que la colonne ne soit pas NUL. Si vous spécifiez une valeur par défaut, SQL Server vous autorisera toujours à omettre cette colonne dans toute instruction d'insertion ultérieure (la valeur par défaut sera affectée à la colonne)