none
Variavel ficando null quando peço pra concatenar RRS feed

  • Pergunta

  • Estou fazendo uma procedure que cria em tempo de execução a query de insert dos dados. E dividi ela em outras sub.procedures como podem ver abaixo. A questão é que a variável @campos que recebe @sqlcampos ao invés de concatenar na linha que marque abaixo quando peço para concatenar (set @campos = @campos  + RTRIM(@virgula) + @nomecampo) ela apaga. O valor fica null ou branco não sei... E não entendo o motivo.

    Tenho este inicio...

            SET @flag = 0;
            SET @nomeprocedure = 'UsuariosIncluirReg';
       EXEC IniciaTransacao @nomeprocedure;

    --monta a query de atualização
    SET @sqlinsert = 'INSERT INTO usuarios ';
    SET @sqlcampos = '(';
    SET @sqlvalues = ') VALUES (';

    EXEC @retorno = InserirCamposInsert @sqlcampos, @sqlvalues, 'LOGIN', @login, null, null;

    Que chaama esta rocedure...

    CREATE PROCEDURE InserirCamposInsert
    @campos varchar(max) output,
    @valores varchar(max) output,
    @nomecampo varchar(max),
    @campotipo1 varchar(max),
    @campotipo2 int,
    @campotipo3 date
    AS
    DECLARE 
    @flag bit, -- retorna 0 se falhar,1 se sucesso
    @virgula as varchar(3)
    BEGIN
       SET @flag = 0;
       set @virgula = null;
       
       IF @campotipo1 IS NOT NULL
       BEGIN
           if @campos IS NULL
           BEGIN
              set @virgula = ', ';
           END
     -->           set @campos = @campos  + RTRIM(@virgula) + @nomecampo;
                set @valores = @valores + RTRIM(@virgula) + RTRIM(REPLACE(@campotipo1, '''', ''''''));
                set @flag = 1;
                RETURN @flag;
       END

    quinta-feira, 9 de março de 2017 19:24

Respostas

Todas as Respostas

  • Boa tarde,

    Desconfio que esse problema está ocorrendo porque a variável @virgula está ficando nula, e se ao concatenar qualquer valor for nulo o resultado será nulo.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 9 de março de 2017 20:13
  • Alam,

    Concordo com o Gapimex, faça o seguinte utilize a função IsNull para verificar se a variável @virgula esta tendo seu valor alterado para Null, neste caso através da função você pode tentar determinar um valor caso exista a ocorrência de Nulo.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 14 de março de 2017 18:27