none
Erro ao Concatenar Dados em Query RRS feed

  • Pergunta

  • Olá pessoal!!

    Estou criando um pacote no Integration Services 2008, e ao resgatar os Dados de origem (OLEDB Source), estou usando o modo de acesso "SQL COMMAND". Ao inserir a Query, o mesmo aponta erro no nome da tabela, que esta sendo gerada a partir de uma concatenação de Strings!!!...Se eu testar a Query no SQL...ele concatena sem problemas. ao copiar a mesma query para o integration, ele não concatena um único caractere (numero 0). por exemplo!!

    Nome da Base correto: 'BKP_ESTAT_ANL_052020 (mês + ano)

    Nome incorreto que gera: 'BKP_ESTAT_ANL_52020 (mês + ano)

    O Nome em questão muda a todo mês para outra tabela que compõe o mesmo nome, alterando somente a data.

    Alguém conhece alguma solução para o Integration? (ja testei varias formas de concatenação diferentes..rs)

    Desde já agradeço!! []'s!

    Declare
    
    	 @mes nvarchar(10)
    	,@ano nvarchar(10)
    	,@tabela nvarchar(100)
    	,@comando nvarchar (1000)
    	,@data as nvarchar (20)
    	,@data2 as nvarchar (20)
    	
    		
    	
    	SET @mes=CAST(MONTH(GETDATE()) as nvarchar) 
    	SET @ano= CAST(YEAR(GETDATE()) as nvarchar)
    	SET @data= (@mes + @ano)
    	SET @data2= '0' + @mes + @ano
    	 
    	If @mes <= 9
    		
    		SET @tabela= 'BKP_ESTAT_ANL_' + @data2
    		
    	ELSE
    		
    		SET @tabela= 'BKP_ESTAT_ANL_'+ @data
    	
    
    	SET @comando=
    
    	 'SELECT 
    		 a.DMOVTO as DATA
    		,b.IPRODUTO as MOVIMENTO
    		,count(a.CTRANS) as QUANTIDADE
    		,CAST(sum(a.VDINH) as float) as VALOR  
    
    		FROM
    			' + (@tabela) +' A
    			INNER JOIN DB_Canais.Agencia.TB_CAD_TRANS_AGENCIA B
    				ON (B.CTRANS = A.CTRANS)
    		WHERE
    			b.CPRODUTO in (4,3) and a.VDINH > 0 
    		GROUP BY a.DMOVTO, b.IPRODUTO
    		ORDER BY a.DMOVTO '
    
    	execute sp_executesql @comando

    segunda-feira, 18 de maio de 2020 20:46

Respostas

Todas as Respostas

  • Boa noite,

    Não sei se vai funcionar no Integration mas segue uma sugestão de código para testes:

    SET @tabela = 
        'BKP_ESTAT_ANL_' + 
        right('0' + CAST(MONTH(GETDATE()) as nvarchar) + CAST(YEAR(GETDATE()) as nvarchar), 6);
    

    Espero que ajude


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

    • Marcado como Resposta Dimi_poliveira terça-feira, 19 de maio de 2020 19:45
    segunda-feira, 18 de maio de 2020 21:36
  • Dimi_poliveira,

    Qual é o componente no Integration Services que você esta utilizando?


    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]

    segunda-feira, 18 de maio de 2020 23:10
    Moderador
  • Opa Junior!!

    Usei o Componente OLEDB Source, para origem dos dados selecionando SQL COMMAND!!! ja no Preview ele aponta a inconsistencia da concatenacao.

    Abraco!!

    terça-feira, 19 de maio de 2020 02:13
  • Boa noite,

    Não sei se vai funcionar no Integration mas segue uma sugestão de código para testes:

    SET @tabela = 
        'BKP_ESTAT_ANL_' + 
        right('0' + CAST(MONTH(GETDATE()) as nvarchar) + CAST(YEAR(GETDATE()) as nvarchar), 6);

    Espero que ajude


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

    Obrigado pela ajuda amigo, mas retornou o mesmo erro!!!
    terça-feira, 19 de maio de 2020 12:51
  • Como ficou o seu código? Você fez o teste colocando o código sugerido no lugar do trecho abaixo?

    	SET @mes=CAST(MONTH(GETDATE()) as nvarchar) 
    	SET @ano= CAST(YEAR(GETDATE()) as nvarchar)
    	SET @data= (@mes + @ano)
    	SET @data2= '0' + @mes + @ano
    	 
    	If @mes <= 9
    		
    		SET @tabela= 'BKP_ESTAT_ANL_' + @data2
    		
    	ELSE
    		
    		SET @tabela= 'BKP_ESTAT_ANL_'+ @data


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

    terça-feira, 19 de maio de 2020 14:45
  • Como ficou o seu código? Você fez o teste colocando o código sugerido no lugar do trecho abaixo?

    	SET @mes=CAST(MONTH(GETDATE()) as nvarchar) 
    	SET @ano= CAST(YEAR(GETDATE()) as nvarchar)
    	SET @data= (@mes + @ano)
    	SET @data2= '0' + @mes + @ano
    	 
    	If @mes <= 9
    		
    		SET @tabela= 'BKP_ESTAT_ANL_' + @data2
    		
    	ELSE
    		
    		SET @tabela= 'BKP_ESTAT_ANL_'+ @data


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

    Desculpee amigo, eu testei o código que me informou e no meio dos testes não me atentei que não alterei outra parte, funcionou sim do modo que sugeriu!!!... não entendo se tem algum motivo, mas quando você tenta dar um SET na variável mais de uma vez..ele acata o primeiro apenas...e não alterar independente de ter condição ou não no SSIS!!!...mas da forma que me informou substituindo a condição...funcionou sim!!...muitooo obrigado pela sua ajuda e todos!!!...

    []'s!!

    terça-feira, 19 de maio de 2020 19:45