Jump to content
Diego Fernandes

Procedure executar 2 Select e retornar 1 valor

Recommended Posts

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.

Edited by thoga31
Formatação do tópico + tags code + GeSHi

Share this post


Link to post
Share on other 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



			
		

Share this post


Link to post
Share on other 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

Edited by Diego Fernandes

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.