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.
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
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];
Vous devrez le faire en deux étapes:
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
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.
cela a fonctionné pour moi:
ALTER TABLE [Table]
Alter COLUMN [Column] VARCHAR(50) not null;
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.
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.
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.
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"
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;
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;
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.
UPDATE myTable SET myColumn = 0