[SQL Server] Vérifier la validité d'une chaine de caractère ou un une valeur numérique

-- =============================================

-- Author:        Zouhaier KHARROUBI

-- Create date:   20/09/2017

-- Description:   Vérifier la validité d'une chaine de caractère ou un une valeur numérique

-- La chaine de caractère doit contenir que des alphabet et/ou le cractère -

-- =============================================

CREATE FUNCTION [dbo].[ufs_ChaineValide]

(

     @Chaine                 VARCHAR(500)

   ,@Type_Validité          TINYINT --1=> Alphabitique, 2=> Numérique

)

RETURNS bit

AS

BEGIN

   DECLARE @Retour                     AS BIT

                  ,@Debut                            AS INT

                  ,@Taille                     AS INT

                  ,@Caractere                  AS CHAR(1)

                  ,@NbreSeparateurDecimal AS INT

SELECT @Taille                           = LEN(@Chaine)

      ,@debut                          = 1

      ,@NbreSeparateurDecimal    = 0

IF ISNULL(@Taille,0)=0

      BEGIN

            SELECT @Retour=0

      END

ELSE

      BEGIN

            SELECT @Retour=1

      END

WHILE @debut <=@taille

      BEGIN

            SELECT @Caractere = SUBSTRING(@Chaine,@Debut,1)

           

            IF @Type_Validité = 1

                  BEGIN

                        IF (UPPER(@Caractere)>'Z' OR UPPER(@Caractere)<'A') AND @Caractere<>'-'

                             BEGIN

                                   SELECT      @Retour=0

                                               ,@Debut=@Taille + 1

                             END

                  END

            IF @Type_Validité = 2

                  BEGIN

                        IF @Caractere='.'

                             BEGIN

                                   SELECT @NbreSeparateurDecimal = @NbreSeparateurDecimal + 1

                             END

                            

                        IF ((@Caractere>'9' OR @Caractere<'0') AND @Caractere<>'.') OR(@debut=@taille AND @Caractere='.') OR(@debut=1 AND @Caractere='.') OR @NbreSeparateurDecimal>1

                             BEGIN

                                   SELECT      @Retour=0

                                               ,@Debut=@Taille + 1

                             END

                  END              

                 

            SELECT @Debut = @Debut + 1

      END

   RETURN @Retour

END