Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
MarceloAndrade
Contributor II
Contributor II

Stored Procedure (SQL Server) não carrega

Estou com dificuldade em caregar informações de  uma procedure no QlikView.

NO BANCO:
eu Consigo executa-lá normalmente:  EXEC AUX_TEMP.dbo.CES_PRO_TES_008a 'GERAL', 2019, 1, 2019, 4.
Os Parâmetros São das Variáveis:
@tipo varchar (50)
@Anna-Nilsson_inicio numérico
@mes_inicio numérico
@Anna-Nilsson_fim numérico
@ mes_fim numérica

NO QLIKVIEW
(Obs. Todas hum Linhas foram tentadas com e sem "modo is write" na Conexão, com e sem habilitar "Abrir base de Dados em Modo de Leitura e gravação"  nas configurações do script)

As 4 tentativas de baixo ficam em execução por aproximadamente 1 min, em seguida o script encerra sem carregar nenhuma linha e sem erros. 
SQL EXEC Aux_Temp.dbo.CES_PRO_TES_008a 'GERAL', 2019, 1, 2019, 4;
SQL EXEC Aux_Temp.dbo.CES_PRO_TES_008a @tipo = 'GERAL', @Anna-Nilsson_inicio = 2019, @mes_inicio = 1, @Anna-Nilsson_fim = 2019, @mes_fim = 4

SQL EXECUTE Aux_Temp.dbo.CES_PRO_TES_008a 'GERAL', 2019, 1, 2019, 4;
SQL EXECUTE Aux_Temp.dbo.CES_PRO_TES_008a @tipo = 'GERAL', @Anna-Nilsson_inicio = 2019, @mes_inicio = 1, @Anna-Nilsson_fim = 2019, @mes_fim = 4;

 

Tambem Tentei OUTRAS Sugestões Que vi na Comunidade, porem Dão Erro de sintaxe ...
SQL EXEC ( '[MSSQLREPORTSPRD \ LY ....]. [Aux_Temp]. [Dbo]. [CES_PRO_TES_008a] "GERAL", 2019, 1, 2019, 4 ');
SQL EXEC ( '[MSSQLREPORTSPRD \ LY ....]. [Aux_Temp]. [Dbo]. [CES_PRO_TES_008a] "$ (tipo)", "$ (ANO_INICIO)", "$ (MES_INICIO)", "$ (ANO_FIM )", "$ (MES_FIM)" ');

SQL Chamada ( 'Aux_Temp.dbo.CES_PRO_TES_008a') ( 'GERAL', 2019, 1, 2019, 4);
SQL Chamada ( 'Aux_Temp.dbo.CES_PRO_TES_008a') ( 'GERAL', '2019', '1', '2019', '4');

SQL Chamada Aux_Temp.dbo.CES_PRO_TES_008a ( 'GERAL', 2019, 1, 2019, 4);
SQL Chamada Aux_Temp.dbo.CES_PRO_TES_008a (@tipo = 'GERAL', @Anna-Nilsson_inicio = 2019, @mes_inicio = 1, @Anna-Nilsson_fim = 2019, @mes_fim = 4);

 

Agradeço qualquer sugestão.

1 Solution

Accepted Solutions
MarceloAndrade
Contributor II
Contributor II
Author

Boa tarde João,

Pelo que pesquisei, o Qlik deveria carregar a procedure normalmente como demonstrado a baixo no vídeo (observe 2:30):
https://www.youtube.com/watch?v=o1uBAMrVyFE

As tentativas que fiz estão de acordo com soluções encontradas aqui na comunidade, entretanto nenhuma funcionou para mim.

Eu consegui resolver meu problema de outra forma, porém, por não acreditar ser a melhor solução não finalizei o post.
A procedure que eu precisava ler criava 5 tabelas temporárias de forma que cada uma se relacionava com a anterior até chegar no resultado desejado. Então criei as 5 variáveis no Qlik e montei todo script da procedure dentro do Qlik.

Exemplo:
LET @tipo = 'GERAL';
LET @Anna-Nilsson_inicio = Year(Today())-2;
LET @mes_inicio = Num(Month(Date#('jan','MMM')));
LET @Anna-Nilsson_fim = Year(Today());
LET @mes_fim = Num(Month(Today()));


SQL CREATE TABLE #tabela1...;
SQL CREATE INDEX...;
SQL INSERT INTO #tabela1...;
....
SQL SELECT tabela_final...;

Dessa forma é criado todas as tabelas dentro do banco, durante a criação e inserção de dados não carrega nenhuma linha no Qlik, somente quando chega no "SELECT" ao final do script.
Com essa solução imaginei que a tentativa de somente executar a procedure (SQL EXECUTE...) estava criando e inserindo dados dentro do banco e só faltava um "SELECT". E lá fui eu comentar todo script e tentar somente executar a procedure e depois traze-la (SELECT). Para minha surpresa, as tabelas não existiam no banco.

Só consegui os valores com o scrip completo da procedure dentro do Qlik.

View solution in original post

6 Replies
mrtinsjoao
Contributor III
Contributor III

Bom dia,
O que esta tentando fazer é executar procedure via qlikview certo ?
o qlikview vai executar isso apenas no servidor e nao vai puxar resposta, isso é normal. Qlikview vai puxar base de dados, como "SQL SELECT ...".
Posso ter entendido errado.
Poderia explicar melhor por gentileza também.

Abraço
MarceloAndrade
Contributor II
Contributor II
Author

Boa tarde João,

Pelo que pesquisei, o Qlik deveria carregar a procedure normalmente como demonstrado a baixo no vídeo (observe 2:30):
https://www.youtube.com/watch?v=o1uBAMrVyFE

As tentativas que fiz estão de acordo com soluções encontradas aqui na comunidade, entretanto nenhuma funcionou para mim.

Eu consegui resolver meu problema de outra forma, porém, por não acreditar ser a melhor solução não finalizei o post.
A procedure que eu precisava ler criava 5 tabelas temporárias de forma que cada uma se relacionava com a anterior até chegar no resultado desejado. Então criei as 5 variáveis no Qlik e montei todo script da procedure dentro do Qlik.

Exemplo:
LET @tipo = 'GERAL';
LET @Anna-Nilsson_inicio = Year(Today())-2;
LET @mes_inicio = Num(Month(Date#('jan','MMM')));
LET @Anna-Nilsson_fim = Year(Today());
LET @mes_fim = Num(Month(Today()));


SQL CREATE TABLE #tabela1...;
SQL CREATE INDEX...;
SQL INSERT INTO #tabela1...;
....
SQL SELECT tabela_final...;

Dessa forma é criado todas as tabelas dentro do banco, durante a criação e inserção de dados não carrega nenhuma linha no Qlik, somente quando chega no "SELECT" ao final do script.
Com essa solução imaginei que a tentativa de somente executar a procedure (SQL EXECUTE...) estava criando e inserindo dados dentro do banco e só faltava um "SELECT". E lá fui eu comentar todo script e tentar somente executar a procedure e depois traze-la (SELECT). Para minha surpresa, as tabelas não existiam no banco.

Só consegui os valores com o scrip completo da procedure dentro do Qlik.

mrtinsjoao
Contributor III
Contributor III

Entendi, bem legal o negocio ! 

Ja tive muito problema com o LET. Acho que poderia criar as variáveis e setar os valores pelo "Visão Geral das Variáveis". Acho que o problema ta nas variáveis. 

Tenta ai e me da o feedback

Abraço ! 

 

 

MarceloAndrade
Contributor II
Contributor II
Author

As variáveis estão corretas, eu costumo colocar valores fixos nas fórmulas para garantir que a expressão funciona e depois crio as variáveis. Também costumo fazer testes para validar o retorno da variável como por exemplo:

If( IsNum( @Anna-Nilsson_fim ), 'Número'
    If( IsText@Anna-Nilsson_fim ), 'Texto'
    )
)

Além disso, se qualquer valor de variável estiver errado, em vez do scrip ficar em execução por alguns minutos e encerrar sem carregar linhas ele apresenta erro na variável e para a execução.

danilostochi
Creator II
Creator II

Boa noite,
Não sei se o sql server aceita a função "Call" no lugar do "Exec" ou então "EXECUTE".
Obs: Aqui utilizamos Oracle.
+55(44) 9 9993-3605, WhatsApp
E-Mail or Skype - danilo16stochi@hotmail.com
MarceloAndrade
Contributor II
Contributor II
Author

Boa tarde Danilo,

Quando postei a pergunta na comunidade o navegador traduziu o comando, só percebi depois "SQL Chamada ...", foi minha tentativa de usar o "CALL" mas da erro de sintaxe mesmo.

Obrigado a todos que estão dando sugestões.