Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Revolution

Para :ph34r: Ninja !!

Recommended Posts

este codigo da Trigger tah muito lento para rodar, roda q nem uma taruga :D algueim tem uma sugestao melhor?!

a moral eh ele pegar sempre q confirmarem a OC (Ordens_Compra.Situacao = 'C') ele gere as parcelas referentes as ordens de compra, quando eu gero 15 parcelas vai rapido mas quando gero 2400 fica tri lento

 

alguem tem outra sugestão para esta trigger?

ocupa menos do servidor se eu fizer

WHILE EXISTS (SELECT OC FROM Inserted WHERE OC NOT IN (SELECT OC FROM Parcelas WHERE OC IN (SELECT OC FROM Inserted WHERE Situacao = 'C')) AND Situacao = 'C')

ou

WHILE EXISTS (SELECT OC FROM Inserted WHERE OC NOT IN (SELECT OC FROM Parcelas) AND Situacao = 'C')

 

 

ai vai o codigo

 

essa eh pra :blink: uhaeuhaeuheauh :blink: :D :D

 

 

 

WHILE EXISTS (SELECT OC FROM Inserted WHERE OC NOT IN (SELECT OC FROM Parcelas) AND Situacao = 'C')BEGIN	DECLARE @Parcela tinyint, @Parcelas tinyint, @Matricula nvarchar(200)	SET @Parcela = 1	SET @Parcelas = (SELECT TOP 1 Parcelas FROM Inserted WHERE OC NOT IN (SELECT OC FROM Parcelas) AND Situacao = 'C')	WHILE @Parcela <= @Parcelas	BEGIN  INSERT INTO Parcelas (OC, OC_Antiga, Parcela, Data_Vencimento, Valor, Situacao, Matricula, Convenio)  (SELECT TOP 1 OC, OC_Antiga, @Parcela, dbo.DtVencimento(Matricula, DATEADD(month, @Parcela-1, Data_Vencimento_Fatura)), Valor_Utilizado/@Parcelas, Situacao, Matricula, Convenio FROM Inserted WHERE OC NOT IN (SELECT OC FROM Parcelas) AND Situacao = 'C')  SET @Parcela = @Parcela + 1  SET @Matricula = (SELECT TOP 1 Matricula FROM Inserted WHERE OC NOT IN (SELECT OC FROM Parcelas) AND Situacao = 'C')  PRINT @Matricula	ENDEND

Compartilhar este post


Link para o post
Compartilhar em outros sites

jah descobri :)

 

DECLARE @OC bigint, @OC_Antiga bigint, @Matricula int, @Data_Vencimento_Fatura smalldatetime, @Valor_Utilizado smallmoney, @Parcelas tinyint, @Situacao varchar(1), @Convenio intDECLARE Tabela_Cursada CURSOR FOR (SELECT OC, OC_Antiga, Matricula, Data_Vencimento_Fatura, Valor_Utilizado, Parcelas, Situacao, Convenio FROM Inserted WHERE Situacao = 'C' AND OC NOT IN (SELECT OC FROM Parcelas))OPEN Tabela_CursadaFETCH NEXT FROM Tabela_CursadaINTO @OC, @OC_Antiga, @Matricula, @Data_Vencimento_Fatura, @Valor_Utilizado, @Parcelas, @Situacao, @ConvenioWHILE @@FETCH_STATUS = 0BEGIN	DECLARE @Parcela tinyint	SET @Parcela = 1	WHILE @Parcela <= @Parcelas	BEGIN  INSERT INTO Parcelas (OC, OC_Antiga, Parcela, Data_Vencimento, Valor, Situacao, Matricula, Convenio)   VALUES (@OC, @OC_Antiga, @Parcela, @Data_Vencimento_Fatura, @Valor_Utilizado/@Parcelas, @Situacao, @Matricula, @Convenio)  SET @Parcela = @Parcela + 1	END	FETCH NEXT FROM Tabela_Cursada	INTO @OC, @OC_Antiga, @Matricula, @Data_Vencimento_Fatura, @Valor_Utilizado, @Parcelas, @Situacao, @ConvenioENDCLOSE Tabela_CursadaDEALLOCATE Tabela_Cursada

 

:P

 

algueim melhora o codigo?

com cursor foi mto mais rapido ;) 100X mais rapido hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.