Ir para o conteúdo
Diego Fernandes

Procedure executar 2 Select e retornar 1 valor

Mensagens Recomendadas

Diego Fernandes

Olá a todos...

não estou conseguindo fazer a SP retornar 1 valor (id_setor ),

no lado do VB já tentei ExecuteScalar, ExecuteNonQuery mas a resposta é

do lado do vb.net a resposta é 0 ou ""A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <=,>,>= ou quando ela é usada como uma expressão."

//SQL SERVER Express 2012
ALTER PROCEDURE [dbo].[uspSetorProximo]
@retorno INT OUTPUT, --aqui vai o valor id_setor
@id_op INTEGER  
as
BEGIN
DECLARE @id_mapa as INT;
SET @id_mapa = (SELECT id_mapa FROM tb_mapa WHERE ID_OP = @id_op)
SET @id_mapa = @id_mapa + 1
SET @retorno = (SELECT id_setor FROM tb_mapa WHERE id_mapa = @id_mapa)
END

'''Visual Studio Express 2012 - vb.net
cmd.CommandText = "uspSetorProximo"
           cmd.Connection = cn
           Dim input As New SqlParameter
           With input
               .ParameterName = "@id_op"
               .SqlDbType = SqlDbType.Int
               .Value = ID_OP
           End With
           Dim output As New SqlParameter
           With output
               .ParameterName = "@retorno"
               .SqlDbType = SqlDbType.Int
               .Value = ID_OP
               .Direction = ParameterDirection.Output
           End With
           With cmd 'definindo o comando : o tipo de parâmetro (entra/saida) e o tipo  de comando.
               .Parameters.Add(output)
               .Parameters.Add(input)
               .CommandType = CommandType.StoredProcedure
           End With
           '  intProximoSetor = CType(cmd.ExecuteScalar, Integer)
           cmd.ExecuteNonQuery()
           intProximoSetor = CType(cmd.Parameters("@retorno").Value, Integer)

desculpe, não tinha a certeza se minha duvida é exatamente vb.net ou sql...:-)

Obrigado a todos.

Editado por thoga31
Formatação do tópico + tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nelsonr

Boas,

esse código está correcto. Testei aqui e funciona.

O que pode estar a acontecer é os dados na base de dados não estarem de acordo com os selects que estás a fazer dentro da stored procedure

Ah, e ali nos selects, para simplificar podes por

SELECT TOP 1 @id_mapa = id_mapa FROM tb_mapa WHERE ID_OP = @id_op
SELECT TOP 1 @retorno = id_setor FROM tb_mapa WHERE id_mapa = @id_mapa+1

Já agora, quando colocares código aqui no forum, usa as tags




			
		

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Diego Fernandes

CRLF obrigado pela dica acima... eu revi todo o código e ao invés de utilizar OUTPUT

utilizei sqlParameter com ReturnValue.

Obrigado

Editado por Diego Fernandes

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.