sábado, 16 de janeiro de 2016

Funcao Dia Util SQL Server

Função que recebe uma data como parâmetro e apresenta se o dia é útil, considerando feriados nacionais brasileiros.



CREATE FUNCTION [dbo].[FN_DIAUTIL](@DataMes DateTime)
RETURNS VARCHAR(100)
AS
BEGIN
 
   DECLARE @FORMATO VARCHAR(3)
   SELECT @FORMATO = DATEFORMAT FROM sys.syslanguages S WHERE S.NAME = @@LANGUAGE 

   DECLARE @PASCOA DATETIME
   SELECT @PASCOA = CASE DATEPART(WeekDay,CAST(DD.DIADOURADO AS DATETIME))
                      WHEN 1 THEN DATEPART(WeekDay,CAST(DD.DIADOURADO AS DATETIME))
                      ELSE   DATEADD(day, (8-DATEPART(WeekDay,CAST(DD.DIADOURADO AS DATETIME))) ,DD.DIADOURADO)
                    END
     FROM (SELECT
                 CASE 
                     WHEN (YEAR(@DataMes) % 19)+1 = 1 AND @FORMATO = 'mdy' THEN '04.14.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 2 AND @FORMATO = 'mdy' THEN '04.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 3 AND @FORMATO = 'mdy' THEN '03.23.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 4 AND @FORMATO = 'mdy' THEN '04.11.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 5 AND @FORMATO = 'mdy' THEN '03.31.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 6 AND @FORMATO = 'mdy' THEN '04.18.' 
                     WHEN (YEAR(@DataMes) % 19)+1 = 7 AND @FORMATO = 'mdy' THEN '04.08.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 8 AND @FORMATO = 'mdy' THEN '03.28.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 9 AND @FORMATO = 'mdy' THEN '04.16.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =10 AND @FORMATO = 'mdy' THEN '04.05.'
                     WHEN (YEAR(@DataMes) % 19)+1 =11 AND @FORMATO = 'mdy' THEN '03.25.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =12 AND @FORMATO = 'mdy' THEN '04.13.'
                     WHEN (YEAR(@DataMes) % 19)+1 =13 AND @FORMATO = 'mdy' THEN '04.02.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =14 AND @FORMATO = 'mdy' THEN '03.22.'
                     WHEN (YEAR(@DataMes) % 19)+1 =15 AND @FORMATO = 'mdy' THEN '04.10.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =16 AND @FORMATO = 'mdy' THEN '03.30.'
                     WHEN (YEAR(@DataMes) % 19)+1 =17 AND @FORMATO = 'mdy' THEN '04.17.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =18 AND @FORMATO = 'mdy' THEN '04.07.'
                     WHEN (YEAR(@DataMes) % 19)+1 =19 AND @FORMATO = 'mdy' THEN '03.27.'

                     WHEN (YEAR(@DataMes) % 19)+1 = 1 AND @FORMATO = 'dmy' THEN '14.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 2 AND @FORMATO = 'dmy' THEN '03.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 3 AND @FORMATO = 'dmy' THEN '23.03.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 4 AND @FORMATO = 'dmy' THEN '11.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 5 AND @FORMATO = 'dmy' THEN '31.03.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 6 AND @FORMATO = 'dmy' THEN '18.04.' 
                     WHEN (YEAR(@DataMes) % 19)+1 = 7 AND @FORMATO = 'dmy' THEN '08.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 = 8 AND @FORMATO = 'dmy' THEN '28.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 = 9 AND @FORMATO = 'dmy' THEN '16.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =10 AND @FORMATO = 'dmy' THEN '05.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 =11 AND @FORMATO = 'dmy' THEN '25.03.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =12 AND @FORMATO = 'dmy' THEN '13.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 =13 AND @FORMATO = 'dmy' THEN '02.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =14 AND @FORMATO = 'dmy' THEN '22.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 =15 AND @FORMATO = 'dmy' THEN '10.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =16 AND @FORMATO = 'dmy' THEN '30.03.'
                     WHEN (YEAR(@DataMes) % 19)+1 =17 AND @FORMATO = 'dmy' THEN '17.04.'  
                     WHEN (YEAR(@DataMes) % 19)+1 =18 AND @FORMATO = 'dmy' THEN '07.04.'
                     WHEN (YEAR(@DataMes) % 19)+1 =19 AND @FORMATO = 'dmy' THEN '27.03.'
                 END + CAST(YEAR(@DataMes) AS VARCHAR(4)) AS DIADOURADO
          ) AS DD

   DECLARE @TB_FERIADOS TABLE (DataMes DateTime, Descricao VARCHAR(100))
   IF @FORMATO = 'dmy'
   BEGIN
    INSERT INTO @TB_FERIADOS SELECT '01-01-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Confraternização Universal'
    INSERT INTO @TB_FERIADOS SELECT '21-04-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Tiradentes'
    INSERT INTO @TB_FERIADOS SELECT '01-05-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Dia do Trabalho'
    INSERT INTO @TB_FERIADOS SELECT '07-09-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Independencia do Brasil'
    INSERT INTO @TB_FERIADOS SELECT '12-10-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Nossa Senhora Aparecida'
    INSERT INTO @TB_FERIADOS SELECT '02-11-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Finados'
    INSERT INTO @TB_FERIADOS SELECT '15-11-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Proclamação da República'
    INSERT INTO @TB_FERIADOS SELECT '25-12-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Natal'
   END
   IF @FORMATO = 'mdy'
   BEGIN
    INSERT INTO @TB_FERIADOS SELECT '01-01-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Confraternização Universal'
    INSERT INTO @TB_FERIADOS SELECT '04-21-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Tiradentes'
    INSERT INTO @TB_FERIADOS SELECT '05-01-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Dia do Trabalho'
    INSERT INTO @TB_FERIADOS SELECT '09-07-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Independencia do Brasil'
    INSERT INTO @TB_FERIADOS SELECT '10-12-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Nossa Senhora Aparecida'
    INSERT INTO @TB_FERIADOS SELECT '11-02-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Finados'
    INSERT INTO @TB_FERIADOS SELECT '11-15-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Proclamação da República'
    INSERT INTO @TB_FERIADOS SELECT '12-25-'+CAST(YEAR(@DataMes) AS VARCHAR(4)) ,'Natal'
   END
   INSERT INTO @TB_FERIADOS SELECT @Pascoa-47  ,'Carnaval'
   INSERT INTO @TB_FERIADOS SELECT @Pascoa-2   ,'Sexta Feira Santa'
   INSERT INTO @TB_FERIADOS SELECT @Pascoa+60  ,'Corpus Christi'
   
   DECLARE @NOMEDIA VARCHAR(13)
   SET @NOMEDIA = CASE DatePart(WeekDay, @DataMes)
                     WHEN 1 THEN 'Domingo'
                     WHEN 2 THEN 'Segunda-Feira'
                     WHEN 3 THEN 'Terça-Feira'
                     WHEN 4 THEN 'Quarta-Feira'
                     WHEN 5 THEN 'Quinta-Feira'
                     WHEN 6 THEN 'Sexta-Feira'
                     WHEN 7 THEN 'Sábado'
                  END
 
 
   DECLARE @RETORNO VARCHAR(100)
   IF (DatePart(WeekDay, @DataMes) BETWEEN 2 AND 6) AND @DataMes NOT IN (SELECT DataMes FROM @TB_FERIADOS)
      SET @RETORNO = 'S'
   ELSE
      SET @RETORNO = 'N'
 
   SET @RETORNO = @RETORNO + ' - ' + @NOMEDIA         
   IF @DataMes IN (SELECT DataMes FROM @TB_FERIADOS)
       SET @RETORNO = @RETORNO + ' - ' +(SELECT Descricao FROM @TB_FERIADOS WHERE DataMes = @DataMes)
 
   RETURN @RETORNO
END
SELECT DBO.FN_DIAUTIL('11.02.2015') AS DIA_UTIL

Funcao Valida CPF ou CNPJ





CREATE FUNCTION [dbo].[Valida_CPFCNPJ](@TEXTO varchar(20)) RETURNS VARCHAR(20)
AS
BEGIN

DECLARE @RESULTADO VARCHAR(20)

DECLARE @CPF_CNPJ VARCHAR(20)

WHILE PATINDEX('%[^0-9]%', @TEXTO) > 0
BEGIN
  SET @TEXTO = STUFF(@TEXTO, PATINDEX('%[^0-9]%', @TEXTO), 1, '')
END

SET @CPF_CNPJ    = @TEXTO

IF LEN(@CPF_CNPJ) NOT IN (11, 14)
BEGIN   
     SET @RESULTADO  = 'Inválido'
     RETURN @RESULTADO
END
 
DECLARE @DIGITO1 INT,  @DIGITO2 INT,  @VALOR1 INT,  @VALOR2 INT
DECLARE @I INT, @J INT, @TOTAL_TMP INT, @COEFICIENTE_TMP INT
   ,    @DIGITO_TMP INT, @VALOR_TMP INT
SET @DIGITO1 = SUBSTRING(@CPF_CNPJ, LEN(@CPF_CNPJ) - 1, 1)
SET @DIGITO2 = SUBSTRING(@CPF_CNPJ, LEN(@CPF_CNPJ), 1)
SET @J = 1
 
WHILE @J <= 2
BEGIN 
    SELECT @TOTAL_TMP = 0, @COEFICIENTE_TMP = 2
    SET @I = ((LEN(@CPF_CNPJ) - 3) + @J)   
    WHILE @I >= 0
    BEGIN
        SELECT
            @DIGITO_TMP = SUBSTRING(@CPF_CNPJ, @I, 1),
            @TOTAL_TMP = @TOTAL_TMP + (@DIGITO_TMP * @COEFICIENTE_TMP),
            @COEFICIENTE_TMP = @COEFICIENTE_TMP + 1
 
        IF (@COEFICIENTE_TMP > 9) AND LEN(@CPF_CNPJ) = 14
            SET @COEFICIENTE_TMP = 2
        SET @I = @I - 1
    END
 
    SET @VALOR_TMP = 11 - (@TOTAL_TMP % 11)
 
    IF (@VALOR_TMP >= 10)
        SET @VALOR_TMP = 0
 
    IF @J = 1
        SET @VALOR1 = @VALOR_TMP
    ELSE
        SET @VALOR2 = @VALOR_TMP
    SET @J = @J + 1
END


SELECT @RESULTADO =
    CASE WHEN @VALOR1 = @DIGITO1 AND @VALOR2 = @DIGITO2
        THEN 'Válido'
        ELSE 'Inválido'
    END

     RETURN @RESULTADO

END

Dependências em SQL Server





DECLARE @NOME_TABELA VARCHAR(100)
SET @NOME_TABELA = 'TB_TABELA'

-- Retorna todos os objetos que dependem da Tabela
EXEC sp_MSdependencies @NOME_TABELA, NULL, 1315327 

-- Retorna todos os objetos que a Tabela depende
EXEC sp_MSdependencies @NOME_TABELA, null, 1053183