none
Criar View RRS feed

  • Pergunta

  • Bom dia a todos!

    Como transformar o script abaixo em uma VIEW. Tenho um banco e gostaria de criar uma VIEW onde esta listasse todos os registros da tabela. O script abaixo me apresenta apenas um registro e eu gostaria de transformá-lo em VIEW para listar todos.

    sds

        

    DECLARE @CODIGO12DIG VARCHAR(12)
    DECLARE @CODIGOEAN VARCHAR(13)
    DECLARE @CODIGOCALCPAR INT
    DECLARE @CODIGOCALCIMPAR INT
    DECLARE @SOMAPARIMPAR INT
    DECLARE @MULTIPLO10SUP INT
    DECLARE @DIGVERIFCALCULADO INT 

    -- SET @CODIGO12DIG = '902020000032'

    SET @CODIGO12DIG = (SELECT TOP(1) CONCAT('90',YEAR(R.DATARECEBIMENTO),R.CODIGORRM) AS EAN FROM RECEBIMENTO R ORDER BY R.CODIGORRM desc)  -- Retorna um código com 12 dígitos '902020000032'

    -- SOMA POSIÇÕES PARES E MULTIPLICA POR 3
    SET @CODIGOCALCPAR = CONVERT(INT,SUBSTRING(@CODIGO12DIG,2,1)) + 
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,4,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,6,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,8,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,10,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,12,1)) 
    SET @CODIGOCALCPAR = @CODIGOCALCPAR * 3

    -- SOMA POSIÇÕES IMPARES
    SET @CODIGOCALCIMPAR = CONVERT(INT,SUBSTRING(@CODIGO12DIG,1,1)) + 
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,3,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,5,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,7,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,9,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,11,1)) 

    SET @SOMAPARIMPAR = @CODIGOCALCPAR + @CODIGOCALCIMPAR

    -- VERIFICA PRÓXIMO MÚLTIPLO DE 10
    IF (@SOMAPARIMPAR <= 10)
       SET @MULTIPLO10SUP = 10
    ELSE
    IF ((@SOMAPARIMPAR % 10) = 0)
       SET @MULTIPLO10SUP = @SOMAPARIMPAR
    ELSE

    BEGIN
         IF (@SOMAPARIMPAR >= 100)
            SET @MULTIPLO10SUP = (CONVERT(INT,SUBSTRING(CONVERT(VARCHAR(3),@SOMAPARIMPAR),1,2)) + 1) * 10
         ELSE
            SET @MULTIPLO10SUP = (CONVERT(INT,SUBSTRING(CONVERT(VARCHAR(2),@SOMAPARIMPAR),1,1)) + 1) * 10
    END

    -- SUBTRAI O MÚLTIPLO DE 10 PELO VALOR CALCULADO PARA ACHAR O DÍGITO VERIFICADOR
    SET @DIGVERIFCALCULADO = @MULTIPLO10SUP - @SOMAPARIMPAR

    SET @CODIGOEAN = CONCAT(@CODIGO12DIG, @DIGVERIFCALCULADO) 


    SELECT @CODIGO12DIG AS CODIGO_ORIGINAL, -- 902020000032
       @SOMAPARIMPAR AS CALCULO_EAN, -- 22
           @MULTIPLO10SUP AS MULTIPLO_10, -- 30
           @DIGVERIFCALCULADO AS DIGITO_CALCULADO,  -- 8
       @CODIGOEAN AS EAN -- 9020200000328

    quarta-feira, 27 de janeiro de 2021 10:48

Todas as Respostas

  • Edilson,

    Na verdade uma View é constituída pelo bloco de código do comando Select, recomendo no seu caso a implementação de uma Stored Procedure ou Função, vejo que o melhor seria usar Stored Procedure:

    -- Exemplo --
    Create Procedure P_ListarTodos
    As
    Begin
    DECLARE @CODIGO12DIG VARCHAR(12)
    DECLARE @CODIGOEAN VARCHAR(13)
    DECLARE @CODIGOCALCPAR INT
    DECLARE @CODIGOCALCIMPAR INT
    DECLARE @SOMAPARIMPAR INT
    DECLARE @MULTIPLO10SUP INT
    DECLARE @DIGVERIFCALCULADO INT 
    
    -- SET @CODIGO12DIG = '902020000032'
    
    SET @CODIGO12DIG = (SELECT TOP(1) CONCAT('90',YEAR(R.DATARECEBIMENTO),R.CODIGORRM) AS EAN FROM RECEBIMENTO R ORDER BY R.CODIGORRM desc)  -- Retorna um código com 12 dígitos '902020000032'
    
    -- SOMA POSIÇÕES PARES E MULTIPLICA POR 3
    SET @CODIGOCALCPAR = CONVERT(INT,SUBSTRING(@CODIGO12DIG,2,1)) + 
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,4,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,6,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,8,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,10,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,12,1)) 
    SET @CODIGOCALCPAR = @CODIGOCALCPAR * 3
    
    -- SOMA POSIÇÕES IMPARES
    SET @CODIGOCALCIMPAR = CONVERT(INT,SUBSTRING(@CODIGO12DIG,1,1)) + 
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,3,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,5,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,7,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,9,1)) +
                  CONVERT(INT,SUBSTRING(@CODIGO12DIG,11,1)) 
    
    SET @SOMAPARIMPAR = @CODIGOCALCPAR + @CODIGOCALCIMPAR
    
    -- VERIFICA PRÓXIMO MÚLTIPLO DE 10
    IF (@SOMAPARIMPAR <= 10)
       SET @MULTIPLO10SUP = 10
    ELSE
    IF ((@SOMAPARIMPAR % 10) = 0)
       SET @MULTIPLO10SUP = @SOMAPARIMPAR
    ELSE
    
    BEGIN
         IF (@SOMAPARIMPAR >= 100)
            SET @MULTIPLO10SUP = (CONVERT(INT,SUBSTRING(CONVERT(VARCHAR(3),@SOMAPARIMPAR),1,2)) + 1) * 10
         ELSE
            SET @MULTIPLO10SUP = (CONVERT(INT,SUBSTRING(CONVERT(VARCHAR(2),@SOMAPARIMPAR),1,1)) + 1) * 10
    END
    
    -- SUBTRAI O MÚLTIPLO DE 10 PELO VALOR CALCULADO PARA ACHAR O DÍGITO VERIFICADOR
    SET @DIGVERIFCALCULADO = @MULTIPLO10SUP - @SOMAPARIMPAR
    
    SET @CODIGOEAN = CONCAT(@CODIGO12DIG, @DIGVERIFCALCULADO) 
    
    
    SELECT @CODIGO12DIG AS CODIGO_ORIGINAL, -- 902020000032
       @SOMAPARIMPAR AS CALCULO_EAN,
    -- 22
           @MULTIPLO10SUP AS MULTIPLO_10,
    -- 30
           @DIGVERIFCALCULADO AS DIGITO_CALCULADO,  -- 8
       @CODIGOEAN AS EAN
    -- 9020200000328
    End
    Go
    
    -- Executando --
    Execute P_ListarTodos
    Go

    Inclusive, você poderá declarar as variáveis como parâmetros de entrada para sua Stored Procedure, bem como, passar os valores no momento da execução.

    Vou postar alguns exemplos do meu blog que podem lhe ajudar a entender a criação de uma Stored Procedure:

    Dica do Mês – SQL Server 2016 SP1 – Comando Create Or Alter – Junior Galvão – MVP – Data Platform (wordpress.com)

    Criando Querys Dinâmicas dentro de Stored Procedures – Junior Galvão – MVP – Data Platform (wordpress.com)

    Processando uma Stored Procedure e armazenando o retorno em uma tabela – Junior Galvão – MVP – Data Platform (wordpress.com)

    Utilizando o comando Return em Stored Procedure – Junior Galvão – MVP – Data Platform (wordpress.com)

    Criando Stored procedure para concatenação de tipos de dados diferentes – Junior Galvão – MVP – Data Platform (wordpress.com)


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 27 de janeiro de 2021 14:24