Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment modifier une colonne de Null à Not Null dans SQL Server

  • Comprendre les limites des données dans les colonnes NOT NULL
    • Annuler l'annulation des données de colonne existantes
  • Modifier la structure des données de la colonne
    • Vérifier la nullité modifiée

Modification de la structure de données d'une colonne dans SQL Server à partir de NULL à NOT NULL , interdisant ainsi les valeurs non nulles dans cette colonne, est généralement effectuée à l'aide du relativement simple ALTER TABLE syntaxe pour modifier de manière appropriée la colonne en question.

Dans ce didacticiel, nous examinerons les précautions de sécurité importantes nécessaires lors de la modification de l'élément existant données dans une colonne, avant d'émettre réellement un ALTER commandes susceptibles de nuire à la table elle-même.

Comprendre les limites des données dans les colonnes NOT NULL

Avant d'apporter des modifications à votre table, il est important de passer brièvement en revue les données qui peuvent (et ne peuvent pas) être spécifiées dans une colonne existante que vous souhaitez modifier en NOT NULL , en s'assurant qu'aucune ligne n'est autorisée à avoir un NULL valeur dans cette colonne.

Plus important encore, tous les NULL existants les valeurs dans la colonne doivent être mis à jour avec une valeur non nulle avant ALTER la commande peut être utilisée avec succès et la colonne devient NOT NULL . Toute tentative de définition de la colonne sur NOT NULL tandis que le réel NULL les données restantes dans la colonne entraîneront une erreur et aucun changement ne se produira.

Annuler l'annulation des données de colonne existantes

Pour s'assurer qu'il n'y a pas de NULL valeurs dans notre colonne, nous utiliserons une UPDATE de base commande, applicable explicitement aux lignes où la valeur est actuellement NULL . Par exemple, nous avons une table de base de client données avec name , email , et phone . Actuellement, quelques-uns des enregistrements ont un NULL phone valeur, que nous ne voulons pas autoriser :

clientsID     name              email                                         phone
1             Neville Estes     [email protected]                         1-843-863-2697
2             Flynn Fry         [email protected]
3             Wyatt Schmidt     [email protected]                          1-950-895-1847
4             Oleg Hill         [email protected]        1-173-344-1578
5             Randall Bullock   [email protected]
6             Lamar White       [email protected]                              1-421-757-4907
7             Fuller Hill       [email protected]                        1-178-437-8281
8             Ulysses Boyle     [email protected]   1-535-515-1494
9             Paki Palmer       [email protected]
10            Kamal Buchanan    [email protected]           1-325-847-4838

Par conséquent, nous pouvons insérer une valeur par défaut pour tous les phone valeurs qui sont actuellement NULL avec la déclaration suivante :

UPDATE
  clients
SET
  phone = '0-000-000-0000'
WHERE
  phone IS NULL;

Maintenant notre NULL les valeurs ont toutes été remplacées par la valeur que nous considérons comme la valeur default , 0-000-000-0000 :

clientsID   name            email                                       phone
1           Neville Estes   [email protected]                       1-843-863-2697
2           Flynn Fry       [email protected]                          0-000-000-0000
3           Wyatt Schmidt   [email protected]                        1-950-895-1847
4           Oleg Hill       [email protected]      1-173-344-1578
5           Randall Bullock [email protected]                                0-000-000-0000
6           Lamar White     [email protected]                            1-421-757-4907
7           Fuller Hill     [email protected]                      1-178-437-8281
8           Ulysses Boyle   [email protected] 1-535-515-1494
9           Paki Palmer     [email protected]                             0-000-000-0000
10          Kamal Buchanan  [email protected]         1-325-847-4838

Modifier la structure des données de la colonne

Maintenant qu'il n'y a plus de NULL plus de valeurs, nous pouvons émettre notre ALTER déclaration pour mettre à jour la colonne afin que tous les ajouts futurs n'autorisent pas NULL valeurs. Puisque nous modifions le phone colonne dans cet exemple, l'instruction ressemblera à ceci :

ALTER TABLE
  clients
ALTER COLUMN
  phone
    NVARCHAR(20) NOT NULL;

Vérifier la nullité modifiée

Une fois la modification de votre colonne effectuée, il est recommandé de vérifier que la colonne n'autorise plus aucun NULL valeurs en exécutant un simple INSERT test et essaie d'insérer un nouvel enregistrement avec le NULL valeur dans la colonne modifiée :

INSERT INTO
  clients(name, email, phone)
VALUES
  ('John Doe', '[email protected]', NULL);

Si tout s'est déroulé comme prévu, SQL Server émettra une erreur indiquant que la colonne n'autorise pas NULL valeurs :

Cannot insert the value NULL into column 'phone', table 'library.dbo.clients'; column does not allow nulls. INSERT fails. [SQL State=23000, DB Errorcode=515]