web-dev-qa-db-fra.com

Modification d'une colonne: null à not null

J'ai une table qui a plusieurs colonnes entières nullables. Cela n'est pas souhaitable pour plusieurs raisons. Je souhaite donc mettre à jour toutes les valeurs nulles sur 0, puis définir ces colonnes sur NOT NULL. En plus de remplacer les valeurs nulles par 0, les données doivent être préservées.

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

Utilisation de SQL Server 20.

1162
Karmic Coder

Tout d’abord, effacez toutes les valeurs NULL actuelles:

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

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

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
1934
mdb

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

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
53
Greg Dougherty

Vous devrez le faire en deux étapes:

  1. Mettez à jour la table afin qu'il n'y ait pas de null dans la colonne.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. Modifier la table pour changer la propriété de la colonne
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
35
Ralph Wiggum

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

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

Sinon, la réponse de Abatichev semblait bonne. Vous ne pouvez pas répéter le changement - il se plaint (du moins dans SQL Developer) que la colonne n'est déjà pas nulle.

25
JDM

cela a fonctionné pour moi:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;
17
Dheeraj Sam

Tant que la colonne n'est pas un identifiant unique

UPDATE table set columnName = 0 where columnName is null

Ensuite

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

16
Eppz

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

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

de plus, 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
csomakk

Dans mon cas, j'ai eu des difficultés avec les réponses postées. 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 rencontrerez un problème pour effectuer cette modification, car la valeur par défaut serait null, ce qui créerait un conflit.

3
Philip Kirkbride

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

STEP1:

Désactiver toutes les contraintes en utilisant ce code:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

STEP2:

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

STEP3:

Activer toutes les contraintes en utilisant ce code:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
2
sam05

Pour la javaDB intégrée incluse dans le JDK (la distribution prise en charge par Apache Derby prise en charge par Oracle), la procédure ci-dessous a fonctionné pour moi.

alter table [table name] alter column [column name] not null;
0
trooper31

Prenons un exemple:

TABLE NAME=EMPLOYEE

Et je veux changer la colonne EMPLOYEE_NAME en NOT NULL. Cette requête peut être utilisée pour la tâche:

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
0
Ashish Dwivedi

La création d'une colonne non nulle et l'ajout de valeurs par défaut peuvent également être effectuées dans l'interface graphique SSMS.

  1. Comme d'autres l'ont déjà indiqué, vous ne pouvez pas définir "not null" tant que toutes les données existantes ne sont pas "not null" comme ceci:

UPDATE myTable SET myColumn = 0

  1. Une fois que cela est fait, avec la table en mode Création (clic droit sur la table et cliquez sur "vue en conception"), vous pouvez simplement décocher les colonnes Autoriser Nulls comme alors:

enter image description here

  1. Toujours en mode Création avec la colonne sélectionnée, vous pouvez voir les propriétés de la colonne dans la fenêtre ci-dessous et définir la valeur par défaut sur 0, comme suit:

enter image description here

0
Tony L.