Inquiridor
Stored Procedure que retorne um valou

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.
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!
-
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
-
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
-
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...