none
Stored Procedure que retorne um valou RRS feed

  • Pergunta

  • Ola pessoal, sei como fazer uma stored procedure pra inserir um registro na tabela de vendas, porem gostaria de saber como trazer o codigo dessa venda que acabo de inserir para lançá-lo na tabela de produtos vendidos. Alguem sabe como posso fazer a stored procedure inserir e dpois me retornar esse codigo? Outra duvida é como fazer uma stored procedure com a clausula IN tipo Vendas.codigo IN (9,10,11,12). Desde já obrigado a todos e parabens por esse forum tão bom.

    sexta-feira, 26 de outubro de 2007 11:55

Todas as Respostas

  • Sabino,

     

    No caso para vc pegar o id da venda vc vai ter que usar um max(id) colocando na cláusula where alguma caracteristica desse pedido. Deve existir algum relacionamento entre a produtos, produtos vendidos e venda. Então existe alguma cláusula que identifique essa "venda". Usando o max(id) você sempre irá listar o último registro inserido. Seria perfeito se vc postasse um exemplo ou até mesmo a estrutura das tabelas. Já o lance do in é bem simples. Só usas como parãmetro do código de venda um varchar. Na aplicação você vai concatenando todos os valores com , EX; 1,2,3,4 Quando chamar a procedure o parâmetro varchar vai receber uma "string" com esses valores. na query que vc usar para buscar os registos vai estar CODIGO IN(@PARAMETRO). Dessa forma sendo 1 ou vários vai ficar perfect.

     

    Espero ter ajudado.

     

    Abraços!

     

    Chapolin.rio@gmail.com

    sexta-feira, 26 de outubro de 2007 12:07
  • segue o exeplo para retorno

     

     

    create proc nome_proc @codigo int

     

      insert into tabela (codigo) Values (@codigo)

     

      Return @codigo -- ou select @codigo as codigo

     

     

    para o in (1,2,3,4)

     

     

    Create Function Uf_SplitString (@String Varchar(1000))
    Returns @RetTableString Table (String Int)
    As
    Begin
    Declare @TableString Table (String Int)
    Declare @Start Int
    Declare @End Int
    Declare @Insert Varchar(30)
    Select @Start = 1, @End = Len(@String+','), @Insert = '', @String = @String + ','
    While @Start <= @End
    Begin
    If Substring(@String,@Start,1) = ','
    Begin
    Insert Into @TableString (String) Values (@Insert)
    Set @Insert = ''
    End
    Else
    Begin
    Set @Insert = @Insert + Substring(@String,@Start,1)
    End
    Set @Start = @Start + 1
    End
    Insert Into @RetTableString (String) Select String From @TableString
    Return
    End
    Create Table #Exemplo (Campo1 int)
    Insert into #Exemplo (Campo1) Values (15)
    Insert into #Exemplo (Campo1) Values (10)
    Insert into #Exemplo (Campo1) Values (1)
    Declare @StringSequencia Varchar(1000)

    Set @StringSequencia = '10,20,30' -- pode ser um retorno de procedure ou passado via codigo mesmo.

    Select * From #Exemplo
    Inner Join (Select String From dbo.Uf_SplitString(@StringSequencia)) Tbl On Tbl.String = #Exemplo.Campo1


     

    sexta-feira, 26 de outubro de 2007 12:08
  • Bom dia Sabino

     

     

    Para retornar o último registro vai depender da estrutura da sua tabela o campo chave é identity ou não ? Se não for você pode pegar o código passado para inserção , se for identity você pode utilizar a função SCOPE_IDENTITY().

    Para fazer a cláusula IN basta você criar um campo varchar(1000) por exemplo passando os códigos, era essa a sua dúvida? Qualquer coisa retorne

     

     

     

     

     

    Espero ter ajudado

     

    sexta-feira, 26 de outubro de 2007 12:14
  • Gente n testei ainda as ideias d vcs mas ja me surgiu uma duvida e se eu tenho varios pcs em rede inserindo vendas e puxar um max(codigo) n vai dar certo n é pois alguem na rede pode ter inserido uma venda "junto" com a minha agora n sei como funciona o Scope_identity() ha meu campo e identity... muito obrigado a todos... minhas duvidas foram sanadas em 100% vou fazer os testes e dpios passo uma posição a vocês...

     

    sábado, 27 de outubro de 2007 12:13