Comment une colonne avec une valeur par défaut peut être ajoutée à une table existante dans SQL Server 2000 / SQL Server 2005 ?
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
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.
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.
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.
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
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
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
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
.
La version la plus basique avec deux lignes seulement
ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
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
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
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.
Utilisation:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
Référence: ALTER TABLE (Transact-SQL) (MSDN)
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();''' ;
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]
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.
ALTER TABLE ADD ColumnName {Column_Type} Constraint
L'article MSDN ALTER TABLE (Transact-SQL) présente la syntaxe alter table.
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.
(getdate())
ou abc
ou 0
ou la valeur de votre choix dans le champ Valeur par défaut ou Liaison comme illustré ci-dessous:Exemple:
ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
Exemple:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
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))
Essaye ça
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
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
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
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
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
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
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]
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.
Si la valeur par défaut est Null, alors:
New Column
Select Type
et cochez la case Autoriser les valeurs nulles.Save
Terminé!
Vous pouvez utiliser cette requête:
ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue;
SQL Server + Table de modification + Ajouter une colonne + Valeur par défaut uniqueidentifier ...
ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
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.
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
é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';
--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]
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
Essayez avec la requête ci-dessous:
ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue
Cela va ajouter une nouvelle colonne dans la table.