sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo modificar una columna de nulo a no nulo en SQL Server

  • Comprender las limitaciones de los datos en columnas NOT NULL
    • Anulación de la anulación de datos de columnas existentes
  • Alterar la estructura de datos de la columna
    • Verificar nulabilidad alterada

Cambiar la estructura de datos de una columna en SQL Server de NULL a NOT NULL , por lo que no se permiten valores no nulos en esa columna, generalmente se realiza mediante el método relativamente simple ALTER TABLE sintaxis para cambiar adecuadamente la columna en cuestión.

En este tutorial, examinaremos las importantes precauciones de seguridad necesarias al modificar existentes datos en una columna, antes de emitir cualquier ALTER comandos que podrían causar daño a la mesa misma.

Comprender las limitaciones de datos en columnas NO NULAS

Antes de realizar cualquier cambio en su tabla, es importante repasar brevemente qué datos pueden (y no pueden) especificarse dentro de una columna existente que desea modificar a NOT NULL , asegurándose de que ninguna fila pueda tener un NULL valor en esa columna.

Lo más crítico, todos los NULL existentes valores dentro de la columna deben actualizarse a un valor no nulo antes de ALTER el comando se puede usar con éxito y la columna se convirtió en NOT NULL . Cualquier intento de establecer la columna en NOT NULL mientras real NULL los datos que quedan en la columna darán como resultado un error y no se producirá ningún cambio.

Anulación de datos de columnas existentes

Para asegurarse de que no haya NULL valores en nuestra columna, usaremos un UPDATE básico comando, aplicable explícitamente a las filas donde el valor es actualmente NULL . Por ejemplo, tenemos una tabla básica de client datos con name , email y phone . Actualmente, algunos de los registros tienen un NULL phone valor, que no queremos permitir:

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

Por lo tanto, podemos insertar un valor predeterminado para todos los phone valores que actualmente son NULL con la siguiente declaración:

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

Ahora nuestro NULL todos los valores han sido reemplazados con el valor que consideramos el 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

Alterar la estructura de datos de la columna

Ahora que no hay NULL valores por más tiempo, podemos emitir nuestro ALTER declaración para actualizar la columna para que todas las adiciones futuras no permitan NULL valores. Dado que estamos alterando el phone columna en este ejemplo, la declaración se verá así:

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

Verificar nulabilidad alterada

Una vez que se realiza la modificación de su columna, es una buena práctica verificar que la columna ya no permita ningún NULL valores ejecutando un simple INSERT prueba e intentando insertar un nuevo registro con NULL valor en la columna alterada:

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

Si todo salió según lo planeado, SQL Server emitirá un error que indica que la columna no permite NULL valores:

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]