Jump to content
Fórum Script Brasil
  • 0

Padronizando tamanho dos campos da Procedure


MRMB

Question

Pessoal,

Estou tentanto fazer o seguinte em uma procedure para facilitar uma possível manuntenção.

Declaro uma variável que irá contém o tamanho do campo. E depois tento declarar uma segunda variável com base no tamanho da primeira variável.

DECLARE @TAMANHO_FIXO INTEGER
SET @TAMANHO_FIXO = 02

DECLARE @FIXO VARCHAR (@TAMANHO_FIXO)

Assim caso alterar o tamanho do campo "FIXO" eu altero somente o SET da variável "@TAMANHO_FIXO".

O problema é que ocorre erro de sintaxe incorreta devido a tipo na linha "DECLARE @FIXO VARCHAR (@TAMANHO_FIXO)".

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

fulvio,

No caso essa procedure realiza várias operações nos campos de uma consulta utilizando as funções REPLICATE e SUBSTRING.

Essas alterações são realizadas com base em um layout pré-definido de um terceiro. Ao terminar o processo na procedure retornar conjuntos de linhas do arquivo a ser gerado já formatado.

Imagine um campo hoje de tamanho 7 do tipo inteiro com valor 456 o tratamento e feito abaixo:

REPLICATE('0',  7 - LEN(SUBSTRING(CAMPO, 1, 7) ) + SUBSTRING(CAMPO, 1, 7) 

Resultado:

0000456

Isso para cada campo e assim gero a linha que incluo em uma tabela e depois retorno essa tabela.

Todavia o campo hoje com tamanho 7 pode ser 10 mês que vem. E seria interessante que estive em uma variável o valor do tamanho do campo para facilitar a manutenção.

Link to comment
Share on other sites

  • 0

Bom dia Cleiton,

Ok, entendido... rs. Mas não seria mais interessante passar o tamanho do campo e fazer a manipulação com este valor?

As vezes o exemplo abaixo possa ajudar...

DECLARE @TAMANHO_FIXO INTEGER
SET @TAMANHO_FIXO = 7

SELECT REPLICATE('0', @TAMANHO_FIXO - LEN(456)) + CAST(456 AS varchar)

Link to comment
Share on other sites

  • 0

fulvio,

Essa é a intenção o problema é o seguinte. Tenho um curso no meu processo e a cada loop inseri uma linha em uma tabela.

E essa tabela temporária e composta pelos campos do layout pré-definido.

DECLARE @TAMANHO_FIXO INTEGER
       SET @TAMANHO_FIXO = 02

    DECLARE @LAYOUT TABLE
    (
        FIXO VARCHAR(@TAMANHO_FIXO) -- Erro.
    )

         SELECT REPLICATE('0', @TAMANHO_FIXO - LEN(456)) + CAST(456 AS varchar)


        -- CURSOR
        -- Inclusão na tabela.

Assim caso a declaração da tabela aceitar o @TAMANHO_FIXO ficaria fácil dar a manutenção.

Como mencionou se usar a variável funcionaria. Contudo, sempre precisaria alterar o valor da variável @TAMANHO_FIXO e a declaração da tabela.c

Link to comment
Share on other sites

  • 0

Bom dia Cleiton,

Desta forma não tem como fazer.... mesmo criando uma variável e tentando executar o string.

você pode criar a coluna como varchar que comporte "todos" os formatos de tamanhos. Aí a manipulação será de acordo com os dados inseridos. Dados com 7 posições teria o @TAMANHO_FIXO = 7, por exemplo...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...