MRMB Posted February 13, 2012 Report Share Posted February 13, 2012 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)". Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted February 13, 2012 Report Share Posted February 13, 2012 Boa tarde Cleiton, Desculpe pela pergunta, mas por que deseja fazer um campo de tamanho variável? Quote Link to comment Share on other sites More sharing options...
0 MRMB Posted February 14, 2012 Author Report Share Posted February 14, 2012 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: 0000456Isso 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. Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted February 14, 2012 Report Share Posted February 14, 2012 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) Quote Link to comment Share on other sites More sharing options...
0 MRMB Posted February 14, 2012 Author Report Share Posted February 14, 2012 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 Quote Link to comment Share on other sites More sharing options...
0 fulvio Posted February 14, 2012 Report Share Posted February 14, 2012 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... Quote Link to comment Share on other sites More sharing options...
0 MRMB Posted February 14, 2012 Author Report Share Posted February 14, 2012 fulvio,Obrigado. Quote Link to comment Share on other sites More sharing options...
Question
MRMB
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.
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.