Ir para conteúdo

Arquivado

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

Antonio Montana

Best Practices - passar Lista ID como Insert

Recommended Posts

Oi pessoal, muitos de vocês ja devem ter dado de frente com o seguinte Problema.

Por exemplo um Produtoque tem várias Ofertas.

Qual a melhor maneira de receber uma Lista de IDs(exemplo: Produto 1 tem as Ofertas 1,5,9) e salvar na minha Tabela ProdutoOfertas?

Tenho na Tabela ProdutoOfertas os seguintes Campos: ProdutoOfertaID,ProdutoID,OfertaID

 

Ja resolvi este "Problema" de várias formas, a última foi a seguinte:

 

DECLARE @P_OfferID varchar(10), @Pos int
SET @P_OfferIDList = LTRIM(RTRIM(@P_OfferIDList)) + ','
SET @Pos = CHARINDEX(',', @P_ResponsibleIDList, 1)

DELETE FROM ProjectOffers WHERE ProjectID = @P_ProjectID;

IF REPLACE(@P_OfferIDList, ',', '') <> ''
	BEGIN	
		WHILE @Pos > 0
			BEGIN

				SET @P_OfferID = LTRIM(RTRIM(LEFT(@P_OfferIDList, @Pos - 1)))

				IF @P_OfferID <> ''
					BEGIN
						INSERT INTO ProjectOffers 
						(
							ProjectID,
							OfferID
						) 
						SELECT
							@P_ProjectID
							,CAST(@P_OfferID AS int)
					END

				SET @P_OfferIDList = RIGHT(@P_OfferIDList, LEN(@P_OfferIDList) - @Pos)
				SET @Pos = CHARINDEX(',', @P_OfferIDList, 1)

			END
	END

 

 

Porém gostaria da opiniao de vocês, se essa é a melhor maneira de Inserir uma lista de IDs recebidos.

 

Lembrando que a primeira linha do Código (DELETE FROM...) é utilizada para zerar os dados da Tabela para inserí-los novamente, ja que um UPDATE neste caso complicaria um poucos mais o código. O Problema do DELETE é que sempre serao gerados novos IDs ProdutoOfertaID, que no meu caso nao teria Problema, pois esse campo nao tem relacao com nenhuma outra Tabela, mas talvez no futuro? Ou seja, o que vocês me aconselham?

 

Merci!

 

Tony Montana

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi pessoal, muitos de vocês ja devem ter dado de frente com o seguinte Problema.

Por exemplo um Produtoque tem várias Ofertas.

Qual a melhor maneira de receber uma Lista de IDs(exemplo: Produto 1 tem as Ofertas 1,5,9) e salvar na minha Tabela ProdutoOfertas?

Tenho na Tabela ProdutoOfertas os seguintes Campos: ProdutoOfertaID,ProdutoID,OfertaID

....

 

   DECLARE @P_OfferID varchar(10), @Pos int
   SET @P_OfferIDList = LTRIM(RTRIM(@P_OfferIDList)) + ','
   SET @Pos = CHARINDEX(',', @P_ResponsibleIDList, 1)
...

 

...

 

Lembrando que a primeira linha do Código (DELETE FROM...) é utilizada para zerar os dados ... Ou seja, o que vocês me aconselham?

 

Merci!

 

Tony Montana

 

 

Opinião pessoal.

A repensar esta modelagem.

Não sei o número de transações que você tem, mas já pensou se 10 transações ao mesmo tempo para o mesmo produto? Quais seriam as ofertas? Complicado a situação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gracias Amigo!

 

Entao, a modelagem esta correta, a pergunta é qual a melhor forma de inserir os IDs das Ofertas da Tabela Produto, sendo que 1 produto pode ter por exemplo 5 ofertas:

 

Produto Oferta

--------- ----------

1 31

1 20

1 11

1 88

1 45

 

 

Poderia fazer no meu código um Loop do tipo:

 

for(int i=0; i<= ofertacount; i++){
        executa procedure(produtoid,ofertaid)
}

 

Mas ai estaria executando a procedure 5, 10, 15 vezes por exemplo!

 

O Sistema é interno, por isso sao poucas as transacoes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

creio que está bom até demais, normalmente essa parte é feita de uma forma mais simples em uma classe de negócios com transação na conexão (nem sempre..rss), o que gera os comandos separadamente e teoricamente menos ágil que a sua solução

 

creio que seria interessante tu colocar uma transação ou abort ai tb. caso der erro no insert protege o delete anterior

 

abs

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.