Usuário com melhor resposta
Erro ao Concatenar Dados em Query

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
Respostas
-
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
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 19 de maio de 2020 23:00
-
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
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
-
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]
-
-
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
-
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
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 19 de maio de 2020 23:00
-
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!!