CHECK CONSTRAINT SQL SERVER

CHECK CONSTRAINT EN SQL


En muchas ocasiones cuando trabajamos con tablas que utilizan diferentes tipos de datos, podemos encontrarnos con los casos de campos numéricos los cuales realizan cálculos y obtenemos resultados con valores negativos o registros ingresados erróneamente lo que se puede convertir en algo frustrante y llevarnos a estar realizando constantes actualizaciones en los registros de la tabla afectada. En este articulo estaremos hablando de las CHECK CONSTRAINT.

Índice de contenido



Que es CHECK CONSTRAINT en SQL

La CHECK restricción nos permite establecer el limite de valores que podemos almacenar en una columna de una tabla, es decir que solo serán admitidos aquellos valores que permita almacenar la columna.


[NOMBRE_COLUMNA][TIPODATO] CHECK(NOMBRE_COLUMNA EXPRESION )

La CHECK restricción como hemos visto debemos declararla luego del nombre de la columna y le tipo de datos:

[NOMBRE_COLUMNA][TIPODATO]: Representan el nombre y el tipo de dato declarado para la columna de una tabla.

CHECK: Instrucción que utilizaremos para limitar el campo de la tabla.

(NOMBRE_COLUMNA EXPRESION): Acá especificamos la columna que vamos limitar y determinamos la expresión, acá podemos hacer uso de operadores lógicos como por ejemplo si necesitamos que el campo solo acepte valores no mayores a 0.


Agregar CHECK CONSTRAINT a una tabla nueva en SQL

Una CHECK restricción podemos crearla en el momento en que estamos definiendo los campos de una tabla nueva, la sintaxis que se utiliza ya la vimos al inicio. A continuación vamos a crear una tabla de ejemplo llamada Artículos la cual contenga los siguientes campos: ID,Nombre, Presentacion,Precio,Cantidad. De los campos mencionados al campo "Cantidad" vamos a establecer una CHECK restricción la cual no permita que valores menores que cero. vamos a crear la tabla.

 CREATE TABLE Articulos(
 ID INT IDENTITY NOT NULL,
 Nombre VARCHAR(100) NULL,
 Presentacion VARCHAR(80) NULL,
 Precio INT NOT NULL,
 Cantidad DECIMAL(18,2) CHECK(Cantidad >0),
 PRIMARY KEY(ID),
 );
 GO

Ahora vamos a crear la siguiente tabla en Sql Server Management Studio.


Si observamos la tabla creada y los campos definidos la check restricción se la hemos definido al campo "Cantidad" y esto lo hemos hecho por dos puntos importantes. El primero al ser un campo de tipo de dato numérico se realizaran cálculos sobre dicho campo, y como segundo punto al almacenar cantidades de algún articulo debemos evitar que se registres datos numéricos negativos.

Ahora vamos a realizar dos ejemplos para ver el trabajo de la check restricción. Primero vamos realizar la inserción de los registros ala tabla  y posterior vamos a proceder a realizar una actualización al campo "Cantidad".



En el ejemplo podemos observar que los registros  han sido guardados de manera correcta. Si intentamos registrar un articulo pero con la cantidad negativa nos va generar un error ya que el campo no admite valores menores que cero.


Al intentar guardar registros negativos en el campo Cantidad este nos arrojara un mensaje de error ya que el campo no admite valores menores que cero. Este tipo de restricción nos evita que se nos genere inserción de registros con valor negativo lo que en muchas ocasiones genera muchos dolores de cabeza.

Ahora probemos realizar una actualización al campo "Cantidad" de la tabla artículos. Supongamos que hemos vendido 4 unidades de Switch Cisco y tenemos que descargarlos de las cantidades . veamos el ejemplo y que pasa.

 DECLARE @CANTIDADVENTA DECIMAL(18,2)
 SET @CANTIDADVENTA = 4

 UPDATE Articulos
 SET
 Cantidad = Cantidad-@CANTIDADVENTA
 WHERE Nombre = 'Switch Cisco'

Ahora ejecutemos el UPDATE  en SQL Management Studio.


Al realizar la actualización de los registros la operación no será llevada a cabo ya que la cantidad vendida excede la cantidad de artículos disponibles por lo cual al momento de actualizar el campo Cantidad este es menor a cero, y nos arrojara el error en pantalla.

También podemos usar la CHECK restricción para múltiples columnas dentro de una tabla.

 CREATE TABLE ArticulosB(
 ID INT IDENTITY NOT NULL,
 Nombre VARCHAR(100) NULL,
 Presentacion VARCHAR(80) NULL,
 Precio INT NOT NULL,
 Existencias DECIMAL(18,2) CHECK(Cantidad >0),
 Disponibles DECIMAL(18,2) CHECK (Disponibles >0),
 PRIMARY KEY(ID),
 );
 GO 

En la siguiente tabla hemos creado restricciones para los campos "Existencias" y "Disponible" de la tabla "ArticulosB" ambos campos no permiten valores menores a cero. Ahora también podemos crear restricciones a nivel de tabla. Para realizar esto debemos especificar las restricciones a los campos involucrados veamos como hacerlo con la tabla creada anteriormente.

 CREATE TABLE ArticulosB(
 ID INT IDENTITY NOT NULL,
 Nombre VARCHAR(100) NULL,
 Presentacion VARCHAR(80) NULL,
 Precio INT NOT NULL,
 Cantidad DECIMAL(18,2) CHECK(Cantidad >0),
 Disponibles DECIMAL(18,2) CHECK (Disponibles >0),
 CHECK(Disponibles = cantidad),--RESTRICCION DE TABLA
 PRIMARY KEY(ID),
 );
 GO

Al aplicar una restricción de tabla estamos diciendo que el campo "Disponible" debe ser igual alas "Existencias", esto con el fin de controlas las existencias en base alas cantidades disponibles.

Ahora bien también podemos nombrar una restricción, para eso debemos hacer uso de la palabra clave CONSTRAINT. Nombremos la restricción de la tabla creada anteriormente.

 CREATE TABLE ArticulosB(
 ID INT IDENTITY NOT NULL,
 Nombre VARCHAR(100) NULL,
 Presentacion VARCHAR(80) NULL,
 Precio INT NOT NULL,
 Cantidad DECIMAL(18,2) CHECK(Cantidad >0),
 Disponibles DECIMAL(18,2) CHECK (Disponibles >0),
 --NOMBRE DE LA RESTRICCION
 CONSTRAINT VALIDAR_CATIDADES CHECK(Disponibles = cantidad),--RESTRICCION DE TABLA
 PRIMARY KEY(ID),
 );
 GO

Agregar CHECK CONSTRAINT a una tabla ya existente en SQL

Para agregar una check restricción a una tabla existente debemos hacer unos de la instrucción ALTER.

Sintaxis
ALTER TABLE NOMBRE_TABLA ADD CHECK(NOMBRECOLUMNA-OPERADOR)
ALTER TABLE NOMBRE_TABLA ADD CONSTRAINT NOMBRERESTRICCION CHECK(NOMBRECOLUMNA-OPERADOR)

Cualquiera de las dos opciones que utilicemos nos creara la restricción al campo de la tabla, con la diferencia que en una de las sintaxis especificamos el nombre de la restricción.

A continuación vamos a crear una tabla de ejemplo y posteriormente agregaremos las restricciones a los campos.


 CREATE TABLE ArticulosC(
 ID INT IDENTITY NOT NULL,
 Nombre VARCHAR(100) NULL,
 Presentacion VARCHAR(80) NULL,
 Precio INT NOT NULL,
 Cantidad_Existencias DECIMAL(18,2) NUll,
 Cantidad_Disponibles DECIMAL(18,2) NULL,
 );
 GO

De la siguiente tabla "ArticulosC" vamos a agregarles CHECK restricciones a los campos "Precio", "Cantidad_Existencias" y "Cantidad_Disponibles".

 ALTER TABLE ArticulosC ADD CONSTRAINT ValidarPrecio CHECK(Precio >=0)
 ALTER TABLE ArticulosC ADD CONSTRAINT ValidarExistencias CHECK(Cantidad_Existencias >0)
 ALTER TABLE ArticulosC ADD CONSTRAINT ValidarDisponibilidad CHECK(Cantidad_Disponibles >0) 

Ahora apliquemos los cambios en SQL Management Studio.


Verifiquemos en la tabla si se han creado las restricciones. Para eso nos vamos ir a la estructura de la tabla, desplegamos las opciones y damos clic en la opción Constraints.



Eliminar CHECK CONSTRAINT en SQ

Para eliminar una  CHECK restricción debemos usar  la siguiente instrucción:

ALTER TABLE NOMBRE_TABLA DROP CONSTRAINT CONSTRAINT_NOMBRE

Supongamos que vamos a eliminar una de las check constraint creadas en la tabla "ArticulosC". Procedamos a eliminar la restricción "ValidarPrecio".

 ALTER TABLE ArticulosC DROP CONSTRAINT ValidarPrecio

Ejecutemos la instruccion en Management Studio:


Verifiquemos si se elimino la restriccion de la  tabla "ArticulosC".


Revisando la tabla podemos observar que se ha eliminado la CHECK restricción "validarPrecios".

En algunos caso suele pasar que no utilizamos la palabra clave CONSTRAINT para nombrar la restricción y se nos hace complicado saber el nombre  de la check restricción, para eso podemos hacer uso de la siguiente declaración.


EXEC sp_help 'NOMBRE_TABLA'

Esta declaracion nos permite obtener la informacion de la tabla consultada. ejecutemos la declaracion  para ver la informacion de la tabla "ArticulosC".


Al consultar la información de la tabla nos mostrara también los nombres de las check restricciones creadas para la tabla "ArticulosC".


Deshabilitar CHECK CONSTRAINT EN SQL

Para deshabilitar una check restricción en una tabla tenemos que realizar la siguiente instrucción.

Sintaxis
ALTER TABLE Nombre_tabla
NOCHECK CONSTRAINT Nombre_constraint;

Podemos deshabilitar la check constraint si se produce alguna modificación en la columna donde tenemos activada la restricción o modificaciones  a realizarse a nivel de tabla. Para desactivar una restricción de la tabla "ArticulosC", utilicemos la sintaxis antes vista.

ALTER TABLE ArticulosC
NOCHECK CONSTRAINT ValidarExistencias 

Si la ejecutamos en Sql Server Management Studio vamos a observar que sigue apareciendo la restricción a pesar de haberla deshabilitado, pero no esta en funcionamiento a menos que decidamos volverla a habilitar.


Esperando les  haiga sido de mucha ayuda el articulo sobre CHECK CONSTRAINT. Las Restricciones son muy importante dada la necesidad de evitar la inserción o actualización de datos incorrectos que no pueden perjudicar al momento de desarrollo de un proyecto o aplicación.


Publicar un comentario

0 Comentarios