Modification d'une colonne: null à not null

J'ai une table qui a plusieurs colonnes entières nullables. Ceci est indésirable pour plusieurs raisons, donc je cherche à mettre à jour tous les valeurs NULL à 0, puis à définir ces colonnes à NOT NULL. En plus de changer les valeurs NULL en 0, les données doivent être conservées.

Je cherche la syntaxe SQL spécifique pour modifier une colonne (appelez-la ColumnA) à " not null". Supposons que les données ont été mises à jour pour ne pas contenir de valeurs nulles.

En utilisant SQL server 2000 .

1051
demandé sur Marko 2009-03-27 16:24:29

11 réponses

Tout d'abord, faites disparaître toutes les valeurs nulles actuelles:

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

Ensuite, mettez à jour la définition de la table pour interdire les valeurs nulles:

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
1763
répondu mdb 2011-06-06 13:48:30

J'ai eu le même problème, mais le champ utilisé par défaut à null, et maintenant je veux par défaut à 0. Cela nécessitait d'ajouter une ligne de plus après la solution de mdb:

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
48
répondu Greg Dougherty 2016-06-16 21:44:14

Vous devrez le faire en deux étapes:

  1. Mettez à jour la table afin qu'il n'y ait pas de valeurs NULL dans la colonne.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. Modifier le tableau pour modifier la propriété de la colonne
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
31
répondu Ralph Wiggum 2018-04-10 15:23:31

Pour Oracle 11g, j'ai pu changer l'attribut de colonne comme suit:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

Sinon la réponse d'abatichev semblait bonne. Vous ne pouvez pas répéter l'alter-il se plaint (au moins dans SQL Developer) que la colonne n'est déjà pas null.

21
répondu JDM 2012-09-17 21:18:03

Tant Que la colonne n'est pas un identificateur unique

UPDATE table set columnName = 0 where columnName is null

Puis

Modifiez la table et définissez le champ sur non null et spécifiez une valeur par défaut de 0

16
répondu Eppz 2009-03-27 13:26:39

Cela a fonctionné pour moi:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;
16
répondu Dheeraj Sam 2012-06-05 13:00:20

Cela semble plus simple, mais ne fonctionne que sur Oracle:

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

En outre, avec cela, vous pouvez également ajouter des colonnes, pas seulement le modifier. Il met à jour la valeur par défaut (0) dans cet exemple, si la valeur était null.

5
répondu csomakk 2013-05-31 09:43:26

Dans mon cas, j'ai eu des difficultés avec les réponses. J'ai fini par utiliser ce qui suit:

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

Remplacez VARCHAR(200) par votre type de données et modifiez éventuellement la valeur par défaut.

Si vous n'avez pas de valeur par défaut, vous allez avoir un problème pour effectuer cette modification, car default serait null créant un conflit.

3
répondu Philip Kirkbride 2017-01-26 20:20:09

Dans le cas de FOREIGN KEY CONSTRAINT... il y aura un problème si '0' n'est pas présent dans la colonne de clé Primaire de la table. La solution pour cela est...

ETAPE 1:

Désactivez toutes les contraintes en utilisant ce code:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

ETAPE 2:

RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)

ETAPE 3:

Activez toutes les contraintes en utilisant ce code:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
2
répondu sam05 2015-06-06 12:24:29

Rendre la colonne non null et ajouter default peut également être fait dans L'interface graphique SSMS.

  1. comme d'autres l'ont déjà dit, vous ne pouvez pas définir "not null" jusqu'à ce que tous les données existantes sont "not null" comme ceci:

UPDATE myTable SET myColumn = 0

  1. Une fois cela fait, avec la table en mode design (clic droit sur table et cliquez sur "Vue de conception"), vous pouvez simplement décocher le Autoriser Les valeurs null colonnes comme ceci:

entrez la description de l'image ici

  1. toujours en mode design avec la colonne sélectionné, vous pouvez voir le Propriétés de la colonne dans la fenêtre ci-dessous et définissez la valeur par défaut à 0 comme suit:

entrez la description de l'image ici

1
répondu Tony L. 2016-09-07 15:29:03

Pour le javaDB intégré inclus dans le JDK (la distribution prise en charge par Oracle du Derby Apache) ci-dessous a fonctionné pour moi

alter table [table name] alter column [column name] not null;
0
répondu trooper31 2014-06-13 00:45:53