web-dev-qa-db-fra.com

Ajouter une colonne avec une valeur par défaut à une table existante dans SQL Server

Comment une colonne avec une valeur par défaut peut être ajoutée à une table existante dans SQL Server 2000 / SQL Server 2005 ?

2439
Mathias

Syntaxe:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Exemple:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Remarques:

Nom de contrainte facultatif:
Si vous laissez CONSTRAINT D_SomeTable_SomeCol, SQL Server se créera automatiquement
une contrainte par défaut avec un nom amusant comme: DF__SomeTa__SomeC__4FB7FEF6

Déclaration optionnelle avec les valeurs:
Le WITH VALUES n'est nécessaire que lorsque votre colonne est nullable
et vous voulez que la valeur par défaut soit utilisée pour les enregistrements existants.
Si votre colonne est NOT NULL, elle utilisera automatiquement la valeur par défaut
pour tous les enregistrements existants, que vous spécifiiez ou non WITH VALUES.

Fonctionnement des insertions avec une contrainte par défaut:
Si vous insérez un enregistrement dans SomeTable et faitespasSpécifiez la valeur de SomeCol, il sera par défaut à 0.
Si vous insérez RecordetSpécifiez la valeur de SomeCol en tant que NULL (et que votre colonne autorise les valeurs nulles),
alors la contrainte par défaut seranotsera utilisé et NULL sera inséré comme valeur.

Les notes étaient basées sur les excellents commentaires de tous ci-dessous.
Un merci spécial à:
@Yatrix, @WalterStabosz, @YahooSerious et @StackMan pour leurs commentaires.

3111
James Boother
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

L'inclusion deDEFAULTremplit la colonne dans existing rows avec la valeur par défaut, de sorte que la contrainte NOT NULL n'est pas violée. 

903
dbugger

Lorsque vous ajoutez une colonne nullable , WITH VALUES garantit que la valeur DEFAULT spécifique est appliquée aux lignes existantes:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
207
phunk_munkie
ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO
122
ddc0660
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
111
Evan V

Faites attention lorsque la colonne que vous ajoutez a une contrainte NOT NULL alors qu'elle n'a pas de contrainte DEFAULT (valeur) L'instruction ALTER TABLE échouera dans ce cas si la table contient des lignes. La solution consiste à supprimer la contrainte NOT NULL de la nouvelle colonne ou à lui fournir une contrainte DEFAULT.

89
jalbert

La version la plus basique avec deux lignes seulement

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
86
adeel41

Utilisation:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 
69
JerryOL

Si vous souhaitez ajouter plusieurs colonnes, vous pouvez le faire de cette façon, par exemple:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO
62
Gabriel L.

Dans SQL Server 2008-R2, je passe en mode conception - dans une base de données de test - et j'ajoute mes deux colonnes à l'aide du concepteur. J'ai ensuite défini les paramètres à l'aide de l'interface graphique, puis de l'infâme. Right-Click donne l'option " Générer un script de changement "!

Bang up ouvre une petite fenêtre avec, vous l'aurez deviné, le script de changement garanti et correctement formaté. Appuyez sur le bouton facile.

48
Jack

Utilisation:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

Référence: ALTER TABLE (Transact-SQL) (MSDN)

46
giá vàng

Vous pouvez faire la chose avec T-SQL de la manière suivante.

 ALTER TABLE {TABLENAME}
 ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
 CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

Vous pouvez également utiliser SQL Server Management Studio également en cliquant avec le bouton droit de la souris dans le menu Création, en définissant la valeur par défaut sur table.

De plus, si vous voulez ajouter la même colonne (si elle n’existe pas) à toutes les tables de la base de données, utilisez:

 USE AdventureWorks;
 EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
43
gngolakia

Vous pouvez également ajouter une valeur par défaut sans avoir à nommer explicitement la contrainte:

ALTER TABLE [schema].[tablename] ADD  DEFAULT ((0)) FOR [columnname]

Si vous rencontrez un problème avec les contraintes par défaut existantes lors de la création de cette contrainte, vous pouvez les supprimer en:

alter table [schema].[tablename] drop constraint [constraintname]
41
Christo

Pour ajouter une colonne à une table de base de données existante avec une valeur par défaut, nous pouvons utiliser:

ALTER TABLE [dbo.table_name]
    ADD [Column_Name] BIT NOT NULL
Default ( 0 )

Voici un autre moyen d'ajouter une colonne à une table de base de données existante avec une valeur par défaut.

Vous trouverez ci-dessous un script SQL beaucoup plus complet pour ajouter une colonne avec une valeur par défaut. Il vérifie notamment si la colonne existe avant de l'ajouter, vérifie également la contrainte et la supprime le cas échéant. Ce script nomme également la contrainte afin que nous puissions avoir une convention de nommage de Nice (j'aime bien DF_) et si SQL ne nous donne pas une contrainte avec un nom qui a un numéro généré aléatoirement; il est donc agréable de pouvoir nommer la contrainte aussi.

-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
            SELECT 1
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'table_Emplyee'
              AND COLUMN_NAME = 'Column_EmployeeName'
           )
    BEGIN

        IF EXISTS ( SELECT 1
                    FROM sys.default_constraints
                    WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
                      AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
                  )
            BEGIN
                ------  DROP Contraint

                ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
            PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
            END
     --    -----   DROP Column   -----------------------------------------------------------------
        ALTER TABLE [dbo].table_Emplyee
            DROP COLUMN Column_EmployeeName
        PRINT 'Column Column_EmployeeName in images table was dropped'
    END

--------------------------------------------------------------------------
-- ADD  COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
                SELECT 1
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_NAME = 'table_Emplyee'
                  AND COLUMN_NAME = 'Column_EmployeeName'
               )
    BEGIN
    ----- ADD Column & Contraint
        ALTER TABLE dbo.table_Emplyee
            ADD Column_EmployeeName BIT   NOT NULL
            CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]  DEFAULT (0)
        PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
        PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
     END

GO

Ce sont deux manières d'ajouter une colonne à une table de base de données existante avec une valeur par défaut.

40
Catto
ALTER TABLE ADD ColumnName {Column_Type} Constraint

L'article MSDN ALTER TABLE (Transact-SQL) présente la syntaxe alter table.

34
Benjamin Autin

Cela peut également être effectué dans l'interface graphique SSMS. Je montre une date par défaut ci-dessous, mais la valeur par défaut peut être quoi que, bien sûr.

  1. Placez votre table en mode Création (cliquez avec le bouton droit de la souris sur la table en objet Explorateur-> Conception)
  2. Ajouter une colonne à la table (ou cliquez sur la colonne que vous souhaitez mettre à jour si it existe déjà)
  3. Dans les propriétés de colonne ci-dessous, entrez (getdate()) ou abc ou 0 ou la valeur de votre choix dans le champ Valeur par défaut ou Liaison comme illustré ci-dessous:

 enter image description here

29
Tony L.

Exemple:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
27
andy

Exemple:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';
21
Mohit Tamrakar

Créez d'abord une table avec le nom étudiant:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

Ajoutez-y une colonne:

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)

SELECT * 
FROM STUDENT

La table est créée et une colonne est ajoutée à une table existante avec une valeur par défaut.

 Image 1

17
Laxmi

SQL Server + Table de modification + Ajouter une colonne + Valeur par défaut uniqueidentifier 

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
16
Naveen Desosha

Essaye ça

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
15
Jakir Hossain
IF NOT EXISTS (
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
    ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END
14
Jeevan Gharti

Cela a beaucoup de réponses, mais je ressens le besoin d'ajouter cette méthode étendue. Cela semble beaucoup plus long, mais il est extrêmement utile si vous ajoutez un champ NOT NULL à une table contenant des millions de lignes dans une base de données active.

ALTER TABLE {schemaName}.{tableName}
    ADD {columnName} {datatype} NULL
    CONSTRAINT {constraintName} DEFAULT {DefaultValue}

UPDATE {schemaName}.{tableName}
    SET {columnName} = {DefaultValue}
    WHERE {columName} IS NULL

ALTER TABLE {schemaName}.{tableName}
    ALTER COLUMN {columnName} {datatype} NOT NULL

Cela ajoutera la colonne en tant que champ nullable et avec la valeur par défaut, mettra à jour tous les champs avec la valeur par défaut (ou vous pourrez affecter des valeurs plus significatives) et, finalement, la colonne sera changée en NOT NULL.

La raison en est que si vous mettez à jour une table à grande échelle et ajoutez un nouveau champ non nul, il doit écrire dans chaque ligne et verrouille ainsi la table entière au fur et à mesure qu'il ajoute la colonne, puis écrit toutes les valeurs.

Cette méthode ajoute la colonne Nullable qui fonctionne beaucoup plus rapidement, puis remplit les données avant de définir le statut Non null.

J'ai constaté que le fait de tout faire en une seule déclaration verrouillerait l'un de nos tableaux les plus actifs pendant 4 à 8 minutes et assez souvent, j'ai mis fin au processus. Cette méthode, chaque pièce ne prend généralement que quelques secondes et provoque un verrouillage minimal.

De plus, si vous avez une table contenant des milliards de lignes, il peut être intéressant de la mettre à jour de la manière suivante:

WHILE 1=1
BEGIN
    UPDATE TOP (1000000) {schemaName}.{tableName}
        SET {columnName} = {DefaultValue}
        WHERE {columName} IS NULL

    IF @@ROWCOUNT < 1000000
        BREAK;
END
13
Ste Bov
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
12
wild coder

Ajouter une nouvelle colonne à une table:

ALTER TABLE [table]
ADD Column1 Datatype

Par exemple,

ALTER TABLE [test]
ADD ID Int

Si l'utilisateur souhaite l'incrémenter automatiquement, alors:

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
10
Chirag Thakar

Cela peut être fait par le code ci-dessous.

CREATE TABLE TestTable
    (FirstCol INT NOT NULL)
    GO
    ------------------------------
    -- Option 1
    ------------------------------
    -- Adding New Column
    ALTER TABLE TestTable
    ADD SecondCol INT
    GO
    -- Updating it with Default
    UPDATE TestTable
    SET SecondCol = 0
    GO
    -- Alter
    ALTER TABLE TestTable
    ALTER COLUMN SecondCol INT NOT NULL
    GO
9
Mohit Dagar

Eh bien, j'ai maintenant quelques modifications à ma réponse précédente. J'ai remarqué qu'aucune des réponses mentionnées IF NOT EXISTS. Je vais donc proposer une nouvelle solution car j'ai eu quelques problèmes pour modifier le tableau.

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
 IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO

Ici TaskSheet est le nom de la table particulière et IsBilledToClient est la nouvelle colonne que vous allez insérer et 1 la valeur par défaut. Cela signifie dans la nouvelle colonne quelle sera la valeur des lignes existantes, donc on en définira automatiquement une. Cependant, vous pouvez changer à votre guise avec le respect du type de colonne comme j'ai utilisé BIT, donc je mets en valeur par défaut 1.

Je suggère le système ci-dessus, car j'ai rencontré un problème. Alors quel est le problème? Le problème est que si la colonne IsBilledToClient existe dans la table, si vous n'exécutez que la partie du code indiquée ci-dessous, vous verrez une erreur dans le générateur de requête SQL Server. Mais s'il n'existe pas, pour la première fois, il n'y aura pas d'erreur lors de l'exécution.

ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]
8
gdmanandamohon
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

À partir de cette requête, vous pouvez ajouter une colonne de type type entier avec la valeur par défaut 0.

8
Sandeep Kumar

Si la valeur par défaut est Null, alors:

  1. Dans SQL Server, ouvrez l'arborescence de la table ciblée.
  2. Clic droit "Colonnes" ==> New Column
  3. Tapez la colonne Nom, Select Type et cochez la case Autoriser les valeurs nulles.
  4. Dans la barre de menus, cliquez sur Save

Terminé!

7
usefulBee

Vous pouvez utiliser cette requête:

ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue;
6
Arun D

SQL Server + Table de modification + Ajouter une colonne + Valeur par défaut uniqueidentifier ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
6
Chanukya

Cliquez avec le bouton droit sur la table, cliquez sous le nom de la dernière colonne et entrez les informations de la colonne.

Ajoutez ensuite une valeur par défaut ou une liaison, quelque chose comme '1' pour chaîne ou 1 pour int.

5

Ceci est pour SQL Server:

ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES

Exemple:

ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES

Si vous voulez ajouter des contraintes, alors:

ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
4
Akhil Singh

étape 1. Vous devez d'abord modifier la table avec l'ajout d'un champ

alter table table_name add field field_name data_type

étape 2 CREATE DEFAULT

USE data_base_name;
GO
CREATE DEFAULT default_name AS 'default_value';

étape 3 ALORS VOUS DEVEZ EXÉCUTER CETTE PROCÉDURE

exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name'

exemple - 

USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
4
raju chowrsiya
--Adding New Column with Default Value
ALTER TABLE TABLENAME 
ADD COLUMNNAME DATATYPE NULL|NOT NULL DEFAULT (DEFAULT_VALUE)

OR

--Adding CONSTRAINT And Set Default Value on Column
ALTER TABLE TABLENAME ADD  CONSTRAINT [CONSTRAINT_Name]  DEFAULT 
(DEFAULT_VALUE) FOR [COLUMNNAME]
3
Erfan Mohammadi
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
3
Krishan Dutt Sharma

Essayez avec la requête ci-dessous:

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

Cela va ajouter une nouvelle colonne dans la table.

1
Anshul Dubey