Saltar al contenido

Validar un Numero telefono en sql server

Ester articulo te explica las 3 formas posible de hacer un validación a nivel de base de datos para evitar que existan valores distintos a telefonos en tu base de datos de sql server. Por lo cual te recomiendo que veas este articulo por que veremos

Como validar un numero de telefono usando restricciones, triggers de sql y una función personalizada de como hacer esto.

Ventajas de utilizar esta validación

Manejar las validaciones con la clausulas check permite reducir errores en la informacion almacenada en tu tabla ademas que para los fines del desarrollo de aplicaciones permite que el developer del backend solo se preocupe por capturar el mensaje de error sin tener que desarrollar todo un algoritmo alrededor de la la informacion suministrada en los formularios de los usuarios.

Índice

    Restricciones para validar telefono

    En SQL Server se puede utilizar la cláusula CHECK para definir restricciones que verifiquen una condición determinada para los valores de una columna.

    La sintaxis del check

    ALTER TABLE nombre_tabla ADD CONSTRAINT nombre_restriccion CHECK (condición);
    

    Donde nombre_tabla es el nombre de la tabla a la que se le va a agregar la restricción, nombre_restriccion es el nombre que le asignas a la restricción, y condición es la expresión que se debe cumplir para que el valor sea válido.

    Por ejemplo, para agregar una restricción CHECK que verifique que el valor de la columna telefono tenga exactamente 10 dígitos numéricos en SQL Server, puedes utilizar la siguiente sintaxis:

    ALTER TABLE mi_tabla 
    ADD CONSTRAINT telefono_check
     CHECK (telefono LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]');
    

    En este ejemplo, estamos agregando una restricción CHECK a la tabla mi_tabla con el nombre telefono_check, que verifica que el valor de la columna telefono tenga exactamente 10 dígitos numéricos utilizando la expresión regular [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].

    Puedes adaptar esta expresión regular para que se ajuste al formato de número de teléfono que necesites.

    Trigger de sql server para validar telefono

    En lo particular tengo mis reservas sobre el uso de Triggers en las tablas , pero aqui te muestro como crear un trigger en SQL Server para validar que un valor de teléfono tenga exactamente 10 dígitos numéricos antes de insertar o actualizar un registro en una tabla.

    Ejemplo puedes utilizar la siguiente sintaxis:

    CREATE TRIGGER validar_telefono_trigger
    ON mi_tabla
    BEFORE INSERT, UPDATE
    AS
    BEGIN
        SET NOCOUNT ON;
    
        IF EXISTS (SELECT * FROM inserted WHERE (telefono IS NULL) OR (LEN(telefono) <> 10) OR (PATINDEX('%[^0-9]%', telefono) > 0))
            RAISERROR('El campo "telefono" debe tener exactamente 10 dígitos numéricos.', 16, 1);
    END;
    

    Para este caso, estamos verificando que el valor de teléfono (telefono) en la tabla mi_tabla tenga exactamente 10 dígitos numéricos utilizando las funciones LEN y PATINDEX. Si el valor no cumple con la condición, el trigger lanza un error mediante la función RAISERROR y la inserción o actualización del registro es cancelada.

    Este trigger se ejecutará antes de que se inserte o actualice un registro en la tabla mi_tabla, por lo que cualquier intento de inserción o actualización que no cumpla con la condición de validación del teléfono será cancelado y se generará un mensaje de error.

    Función en SQL Server para validar

    Si deseas crear una función en SQL Server para validar que un valor de teléfono tenga exactamente 10 dígitos numéricos, puedes utilizar la siguiente sintaxis:

    CREATE FUNCTION validar_telefono (@telefono VARCHAR(50))
    RETURNS BIT
    AS
    BEGIN
        DECLARE @resultado BIT;
    
        IF (@telefono IS NULL) OR (LEN(@telefono) <> 10) OR (PATINDEX('%[^0-9]%', @telefono) > 0)
            SET @resultado = 0;
        ELSE
            SET @resultado = 1;
    
        RETURN @resultado;
    END;
    

    En esta función, estamos recibiendo un valor de teléfono como parámetro de entrada (@telefono), y verificamos que el valor tenga exactamente 10 dígitos numéricos utilizando la función LEN y que el valor sea un número utilizando la función PATINDEX. Si el valor es válido, establecemos el valor de retorno de la función en 1; de lo contrario, lo establecemos en 0.

    Como usar una función dentro de un constraint?

    Para utilizar esta función en una sentencia CHECK para validar el campo telefono de una tabla, puedes utilizar la siguiente sintaxis:

    ALTER TABLE mi_tabla ADD CONSTRAINT telefono_check CHECK (dbo.validar_telefono(telefono) = 1);
    

    En esta sentencia CHECK, estamos utilizando la función dbo.validar_telefono para verificar que el valor de la columna telefono tenga exactamente 10 dígitos numéricos. Si el valor no cumple con la condición, la restricción de la tabla no permitirá la inserción o actualización del registro.

    En conclusion

    Desde mi punto de vista el uso de la clasusla check puede ser la mejor opcion pero de igual cada uno de estos ejemplos tienen su razon por lo cual te recomiendo usar la que mejor se adapte a tu escenario.

    Hasta la Proxima Gracias :D!!