89 messaggi dal 04 settembre 2010
Buonasera,
sono diversi giorni che sbatto la testa su una query di inserimento dati massivo all'interno di una tabella.
Questo è lo scenario, ricevo i file in formato excel, questi file contengono la lista di articoli richiesti da clienti, i campi del foglio excel comprendono Codart,Quantita_Richiesta.
Il file lo devo importare all'interno di una datagridview, a questo punto creo la query che in base al CodArt e Quantita_Richiesta compilo la tabella Dettaglio_Ordini recuperando dalla tabella Articoli CodArt,Denominazione,Quantità;Prezzo_Unit, Valore fin qui nessun problema il problema si presenta nella query che mi restituisce sempre duplicateKey e non riesco a capire dove è l'errore.
Vi allego la query:
"INSERT INTO pratica_dettaglio (ID_Pratica,Nuc,Denominazione,Quantita,Prezzo,Stato,Quantita_Indisp,Mc,Peso) SELECT * FROM (SELECT @ID_Pratica, materiali.Nuc, materiali.Denominazione,@Quantita,materiali.Prezzo * " & _Qta & ",@Stato,@Quantita_Indisp,@Mc,@Peso FROM materiali WHERE materiali.Nuc=@Nuc) As Temp WHERE NOT EXISTS (SELECT Nuc FROM pratica_dettaglio WHERE pratica_dettaglio.Nuc=@Nuc And pratica_dettaglio.ID_Pratica=@ID_Pratica) LIMIT 1"


La query controlla se i record sono gia presenti nella tabella in caso l'operatore per errore ricarichi lo stesso file excel più volte.
Premetto che la semplice query INSERT INTO con la SELECT funziona chiaramente se il file excel viene caricato più volte gli articoli vengono aggiunti tante volte.

Mi aiutate a trovare il problema nella query grazie.
34 messaggi dal 04 luglio 2003
Può essere che il Nuc si ripeta nei dati che devi inserire? Perché scritta così il NOT EXISTS lo controlla solo una volta all'inizio, quando si prepara le righe da inserire. O lanci un insert col not exists alla volta (per ogni record da inserire), oppure controlli prima, che nei dati da inserire non si ripeta il Nuc.
89 messaggi dal 04 settembre 2010
Grazie per la risposta, si ripete il nuc!
adesso però il problema si fà complicato per me, ti spiego perchè.
Nella tabella Prodotti ho diversi articoli con lo stesso Nuc che gestisco con un Barcode specifico per ogni uno, ogni articolo con lo stesso NUC si differenzia dagli altri per la data di carico in magazzino (stiamo parlando di diverse migliaia di articoli), quindi quando ricevo l'ordine dal cliente lo stesso non conosce il barcode associato quindi dovrei gestire questi articoli tramite SELECT che inserisco in un dataset per poi creare il report per il magazzino con il quale oltre ai dati dell'articolo associo anche il barcode.

Quindi dovrei tramite SELECT gestire questi articoli in base alla dati di carico e la giacenza di magazzino dalla più vecchia ala più recente in base alla quantita richiesta per ogni ordine e la capienza della giacenza di magazzino chiaramente se la capienza è insufficiente deve azzerare il primo articolo e dare la rimanenza con gli articoli successivi.

Non so proprio come fare riesci a darmi una mano grazie
34 messaggi dal 04 luglio 2003
Se i nuc sono pacchi di articoli, come mi sembra di capire, e i clienti possono richiedere anche parti di nuc, e non solo nuc interi, allora secondo me dovresti prevedere una tabella che rappresenti i nuc "spacchettati", cioè con un record per ogni articolo, e gestire quelli negli ordini, altrimenti sarebbe difficile sapere quando gli articoli di un nuc sono finiti. Poi puoi decidere di mantenere una relazione con la tabella dei nuc oppure ricopiare in ognuno i dati che ti servono (barcode, data di arrivo in magazzino). Questo però implica un ragionamento sulla struttura delle tabelle e delle relazioni che dovresti fare prima di scrivere altre select e insert.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.