Comment puis-je ajouter une colonne avec une valeur par défaut à une table existante dans SQL Server 2000 / SQL Server 2005 ?
2767
Comment puis-je ajouter une colonne avec une valeur par défaut à une table existante dans SQL Server 2000 / SQL Server 2005 ?
Réponses:
Syntaxe:
Exemple:
Remarques:
Nom de contrainte facultatif:
si vous
CONSTRAINT D_SomeTable_SomeCol
omettez, SQL Server générera automatiquementune contrainte par défaut avec un nom drôle comme:
DF__SomeTa__SomeC__4FB7FEF6
Instruction With-Values facultative:
la
WITH VALUES
est nécessaire uniquement lorsque votre colonne est Nullableet que vous souhaitez que la valeur par défaut soit utilisée pour les enregistrements existants.
Si votre colonne l'est
NOT NULL
, elle utilisera automatiquement la valeur par défautpour tous les enregistrements existants, que vous le spécifiiez
WITH VALUES
ou non.Fonctionnement des insertions avec une contrainte par défaut:
Si vous insérez un enregistrement dans
SomeTable
et ne spécifiez pasSomeCol
la valeur de, il sera défini par défaut sur0
.Si vous insérez un enregistrement et spécifiez
SomeCol
la valeur deNULL
(et que votre colonne autorise les valeurs nulles),la contrainte par défaut ne sera pas utilisée et
NULL
sera insérée en tant que valeur.Les notes étaient basées sur les excellents commentaires de chacun ci-dessous.
Un merci spécial à:
@Yatrix, @WalterStabosz, @YahooSerious et @StackMan pour leurs commentaires.
la source
NOT NULL
. Veuillez essayer ceci:create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah;
vous verrez 2 valeurs NULL pour la colonneb
.WITH VALUES
pour mettre à jour les lignes annulables existantes. Voir MSDN : "Si la colonne ajoutée autorise les valeurs nulles etWITH VALUES
est spécifiée, la valeur par défaut est stockée dans la nouvelle colonne, ajoutée aux lignes existantes."L'inclusion de DEFAULT remplit la colonne dans les lignes existantes avec la valeur par défaut, de sorte que la contrainte NOT NULL n'est pas violée.
la source
Lorsque vous ajoutez une colonne nullable , vous vous
WITH VALUES
assurerez que la valeur DEFAULT spécifique est appliquée aux lignes existantes:la source
DEFAULT
contrainte aura toujours une valeur - c'est-à-dire qu'elle ne sera pas NULL, même si elleNOT NULL
n'est pas spécifiée.BIT
type de données, je parlais de cetteBIT
colonne particulière . Regardez la réponse, la colonne est déclarée commeNOT NULL
.la source
la source
Attention lorsque la colonne que vous ajoutez a une
NOT NULL
contrainte, mais n'a pas deDEFAULT
contrainte (valeur). L'ALTER TABLE
instruction échouera dans ce cas si la table contient des lignes. La solution consiste soit à supprimer laNOT NULL
contrainte de la nouvelle colonne, soit à lui fournir uneDEFAULT
contrainte.la source
La version la plus basique avec deux lignes seulement
la source
Utilisation:
la source
Si vous souhaitez ajouter plusieurs colonnes, vous pouvez le faire de cette façon, par exemple:
la source
Utilisation:
Référence: ALTER TABLE (Transact-SQL) (MSDN)
la source
Pour ajouter une colonne à une table de base de données existante avec une valeur par défaut, nous pouvons utiliser:
Voici une autre façon d'ajouter une colonne à une table de base de données existante avec une valeur par défaut.
Un script SQL beaucoup plus approfondi pour ajouter une colonne avec une valeur par défaut est ci-dessous, y compris vérifier si la colonne existe avant de l'ajouter également archiver la contrainte et la supprimer s'il y en a une. Ce script nomme également la contrainte afin que nous puissions avoir une belle convention de dénomination (j'aime DF_) et sinon SQL nous donnera une contrainte avec un nom qui a un nombre généré aléatoirement; donc c'est bien de pouvoir aussi nommer la contrainte.
Il existe deux façons d'ajouter une colonne à une table de base de données existante avec une valeur par défaut.
la source
Vous pouvez faire la chose avec T-SQL de la manière suivante.
Vous pouvez également utiliser SQL Server Management Studio en cliquant avec le bouton droit sur la table dans le menu Conception, en définissant la valeur par défaut sur table.
Et de plus, si vous souhaitez ajouter la même colonne (si elle n'existe pas) à toutes les tables de la base de données, utilisez alors:
la source
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 et je fais les réglages avec l'interface graphique, puis l'infâme Right-Clickdonne l'option " Générer le script de changement "!
Bang up apparaît une petite fenêtre avec, vous l'aurez deviné, le script de changement garanti au travail correctement formaté. Appuyez sur le bouton facile.
la source
Alternativement, vous pouvez ajouter une valeur par défaut sans avoir à nommer explicitement la contrainte:
Si vous rencontrez un problème avec les contraintes par défaut existantes lors de la création de cette contrainte, elles peuvent être supprimées par:
la source
Cela peut également être fait dans l'interface graphique SSMS. Je montre une date par défaut ci-dessous mais la valeur par défaut peut être n'importe quoi, bien sûr.
(getdate())
ouabc
ou0
ou la valeur souhaitée dans le champ Valeur par défaut ou Liaison , comme illustré ci-dessous:la source
L'article MSDN ALTER TABLE (Transact-SQL) a toute la syntaxe alter table.
la source
Exemple:
la source
Exemple:
la source
Créez d'abord une table avec le nom étudiant:
Ajoutez-y une colonne:
La table est créée et une colonne est ajoutée à une table existante avec une valeur par défaut.
la source
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 avec des millions de lignes dans une base de données active.
Ce que cela fera, c'est ajouter la colonne en tant que champ nullable et avec la valeur par défaut, mettre à jour tous les champs à la valeur par défaut (ou vous pouvez attribuer des valeurs plus significatives), et enfin cela changera la colonne pour qu'elle ne soit PAS NULL.
La raison en est que si vous mettez à jour une table à grande échelle et ajoutez un nouveau champ non nul, il doit écrire sur chaque ligne et verrouillera par conséquent la table entière lors de l'ajout de la colonne, puis de l'écriture de toutes les valeurs.
Cette méthode ajoutera la colonne nullable qui fonctionne beaucoup plus rapidement par elle-même, puis remplit les données avant de définir le statut non nul.
J'ai trouvé que faire tout cela dans une seule instruction verrouillerait l'une de nos tables les plus actives pendant 4 à 8 minutes et j'ai souvent tué le processus. Cette méthode, chaque partie ne prend généralement que quelques secondes et provoque un verrouillage minimal.
De plus, si vous avez une table dans la zone de milliards de lignes, il peut être utile de regrouper la mise à jour comme suit:
la source
Essaye ça
la source
SQL Server + Modifier la table + Ajouter une colonne + Valeur par défaut uniqueidentifier
la source
la source
NOT EXISTS
chèque avant d'essayer de modifier la table. Très bonne solution. Quelques commentaires supplémentaires sur la façon dont cela fonctionne le rendraient encore plus utile.la source
Ajoutez une nouvelle colonne à une table:
Par exemple,
Si l'utilisateur souhaite l'incrémenter automatiquement, alors:
la source
C'est pour SQL Server:
Exemple:
Si vous souhaitez ajouter des contraintes, alors:
la source
Cela peut être fait par le code ci-dessous.
la source
Essayez avec la requête ci-dessous:
Cela ajoutera une nouvelle colonne dans le tableau.
la source
À partir de cette requête, vous pouvez ajouter une colonne d'entier de type de données avec la valeur par défaut 0.
la source
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 en apporter une nouvelle solution car j'ai rencontré des problèmes pour modifier la table.Voici
TaskSheet
le nom de la table particulière etIsBilledToClient
est la nouvelle colonne que vous allez insérer et1
la valeur par défaut. Cela signifie dans la nouvelle colonne quelle sera la valeur des lignes existantes, donc une sera automatiquement définie à cet endroit. Cependant, vous pouvez changer comme vous le souhaitez en respectant le type de colonne comme je l'ai utiliséBIT
, j'ai donc mis la 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
IsBilledToClient
colonne existe dans le tableau, alors si vous exécutez uniquement la partie du code donné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.la source