Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) setar @variavel com resultado de procedure


fercosmig

Pergunta

quero atribuir a uma variavel (@qtd_validos) o resultado de uma procedure (PRC_URA_CONSULTA_CHAMADOS) porém

se declaro @qtd_validos como varchar me retorna a string => exec dbo.PRC_URA_CONSULTA_CHAMADOS '2009-01-01 00:00:00','2009-01-15 23:59:59','1124',0

se declaro @qtd_validos como integer da erro => Syntax error converting the varchar value 'exec dbo.PRC_URA_CONSULTA_CHAMADOS '2009-01-01 00:00:00','2009-01-15 23:59:59','1124',0' to a column of data type int.

preciso atribuir o valor de retorno desta linha(exec dbo.PRC_URA_CONSULTA_CHAMADOS '2009-01-01 00:00:00','2009-01-15 23:59:59','1124',0) após execução

procurei em vários artigos, fóruns, etc.. não achei sobre => atribuir a uma variavel o resultado de uma procedure

achei este tópico http://forum.imasters.uol.com.br/index.php...iavel-variavel/

mas o problema está na conversão dos dados...

resumindo: tem alguma coisa errada que não está certa!

declare @id_ilha as int
declare @id_intranet as int
declare @data_inicial as varchar(50)
declare @data_final as varchar(50)
declare @id_ura as varchar(50)
declare @qtd_respondidas as int
declare @my_query as varchar(255)
declare @qtd_validos as varchar(255)
--declare @qtd_validos as int

set @id_ilha = 0
set @id_intranet = 186
set @data_inicial = '2009-01-01 00:00:00'--cast(year(getdate()) as varchar(4)) + '-' + cast(month(getdate()) as varchar(2)) + '-01 00:00:00'
set @data_final = '2009-01-15 23:59:59'--cast(year(getdate()) as varchar(4)) + '-' + cast(month(getdate()) as varchar(2)) + '-' + cast(day(getdate()) as varchar(2)) + ' 23:59:59'
set @id_ura = (select fk_int_codigo_usr_ura from TBL_INTRA_USUARIO_RELACIONAMENTO where fk_int_codigo_usr_intranet = @id_intranet)
set @qtd_respondidas = (select count(ID_PESQUISA) from DB_URA.DB_URA.dbo.TBL_URA_PESQUISA where ID_STATUS = 0 and DT_CAD between @data_inicial and @data_final and ID_ANALISTA = @id_ura)
set @my_query = 'exec dbo.PRC_URA_CONSULTA_CHAMADOS '+char(39)+@data_inicial+char(39)+','+char(39)+@data_final+char(39)+','+char(39)+@id_ura+char(39)+','+convert(varchar(30),@id_ilha)
set @qtd_validos = (select @my_query)
--set @qtd_validos = (convert(int,select @my_query))
print @id_ilha
print @id_intranet
print @data_inicial
print @data_final
print @id_ura
print @qtd_respondidas print @my_query
print @qtd_validos
print '**FIM**'
resultado:
0 186 2009-01-01 00:00:00 2009-01-15 23:59:59 1124 22 exec dbo.PRC_URA_CONSULTA_CHAMADOS '2009-01-01 00:00:00','2009-01-15 23:59:59','1124',0 exec dbo.PRC_URA_CONSULTA_CHAMADOS '2009-01-01 00:00:00','2009-01-15 23:59:59','1124',0 **FIM**
procedure PRC_URA_CONSULTA_CHAMADOS
ALTER   proc dbo.PRC_URA_CONSULTA_CHAMADOS
@init_date AS DATETIME,
@end_date AS DATETIME,
@analista AS VARCHAR(50),
@id_ilhas AS INT
AS SELECT COUNT(TBL_INTRA_CHAMADOS_MOEBIUS.pk_int_codigo_chamado) AS TOTAL
FROM...

abraços

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Amigo. Não sei se entendi a sua dúvida direito, mas vamos lá...

Quando preciso do valor de retorno de alguma procedure, faço a seguinte implementação.

Na procedure:

Alter Proc dbo.PRC_URA_CONSULTA_CHAMADOS

@Retorno Integer OutPut,

@init_date AS DATETIME,

@end_date AS DATETIME,

@analista AS VARCHAR(50),

@id_ilhas AS INT

As ...

Pra atribuir o valor de retorno em alguma variável:

Declare @Retorno Integer

Exec dbo.PRC_URA_CONSULTA_CHAMADOS @Retorno OutPut

Select @Retorno As Retorno

Faz as alterações e testa aí... caso tenha alguma dúvida, posta aí. :.)

Link para o comentário
Compartilhar em outros sites

  • 0

então fulvio

esta procedure conta o total de ocorrências cadastradas por um funcionário dentro de um período, o resultado dela é assim:

 
TOTAL
152

o problema é que não esta gravando este valor total na variavel @qtd_validos, não executa a query que está em @my_query, ele salva a string toda

print @qtd_validos deveria mostrar 152 mas mostra a string completa "exec dbo.PRC_URA_CONSULTA_CHAMADOS '2009-01-01 00:00:00','2009-01-15 23:59:59','1124',0" sem executar a procedure.

set @my_query = 'exec dbo.PRC_URA_CONSULTA_CHAMADOS '+char(39)+@data_inicial+char(39)+','+char(39)+@data_final+char(39)+','+char(39)+@id_ura+char(39)+','+convert(varchar(30),@id_ilha)

set @qtd_validos = (select @my_query)

valeu cara!

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

bom dia

bom, depois de muito tempo estou retomando o projeto com algumas modificações... ainda sem sucesso.

a procedure PRC_URA_CONSULTA_CHAMADOS não foi alterada, o resultado é um campo total com um valor ex: 152 (select count(campo) as total from tabela where...)

declare @int_qtd_chamados as int
set @int_qtd_chamados = (
	exec dbo.PRC_URA_CONSULTA_CHAMADOS '2010-01-01 00:00:00','2010-01-15 23:59:59','1124',null
)
if @int_qtd_chamados < 100
	begin ...
	end
else
	begin ...
	end
infelizmente apresenta a mensagem de erro abaixo mensagem de erro:
Server: Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'exec'.
Server: Msg 170, Level 15, State 1, Line 4
Line 4: Incorrect syntax near ')'.

já tentei de 1001 formas sem sucesso... openquery, etc...

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Amigo!!!

O SQL não consegue executar a procedure e com o resultado "setar" a variável. Desta forma não. O erro de sintaxe EXEC é exatamente por causa disso.

O que você pode fazer é colocar uma variável de RETORNO na Procedure. Aí sim você conseguirá setar uma variável externa, que aguarda um retorno da Procedure.

Olha se isso resolve. :.)

Ex.:

-- Criação da Procedure
create proc dbo.teste @Data1 datetime, @Data2 datetime, @Campo1 int, @CampoRetorno int OutPut
as
set @CampoRetorno = '152'
-----------

declare @int_qtd_chamados as int

exec teste @Data1='2010-01-01 00:00:00', @Data2='2010-01-15 23:59:59', @Campo1='1124', @CampoRetorno=@int_qtd_chamados OutPut

--select @int_qtd_chamados

if @int_qtd_chamados < 100
begin ...
end
else
begin ...
end

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...