Ir para conteúdo
Fórum Script Brasil
  • 0

Padronizando tamanho dos campos da Procedure


MRMB

Pergunta

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 para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...