Modifica inserimento dati

martedì 27 ottobre 2009 - 11.02

ventu Profilo | Newbie

Ciao a tutti, tutti i giorni alle ore 12:00 un programma scritto in VB.net che feci quando ne capivo ancora meno di ora, legge un file testuale di circa 100 mega estratto da un gestionale interno.
Questo file viene esaminato da una logica .net e inserito i dati nel DB (SQL 2005 Express). (una cosa tipo: i primi 10 caratteri del primo rigo sono X, i secondi 20 sono Y, i terzi 40 sono Z e cosi via)

Tempo fà, decisi di fare in questo modo:

-Cancellare la tabella.
-Ricreare la tabella vuota.
-Reinserire i dati aggiornati.

Dato che la tabella è in sola lettura per tutti, non si son mai presentati particolari problemi.
Oggi che sono un po più esperto mi sono accorto che l'unico vero problema di questo giochetto è che non posso creare relazioni statiche, quindi non posso usare l'id della tabella come FK per altre tabelle.
Ricordo che tempo fà pensai di fare una query di inserimento con IF, anzi che cancellare la tabella tutte le volte, ma il problema mi si presentava, quando dal file sorgente, sparivano delle righe perchè cancellate sul gestionale, e quindi il mio DB le lasciava li.. La query era :

IF exist (select blablabla)
UPDATE
ELSE
INSERT

Una bella gatta da pelare... Secondo voi che strada potrei scegliere per evitare di droppare tutte le volte la tabella e ricrearla?
M.

alx_81 Profilo | Guru

>Ciao a tutti,
ciao

>Ricordo che tempo fà pensai di fare una query di inserimento
>con IF, anzi che cancellare la tabella tutte le volte, ma il
>problema mi si presentava, quando dal file sorgente, sparivano
>delle righe perchè cancellate sul gestionale, e quindi il mio
>DB le lasciava li.. La query era :
>Una bella gatta da pelare... Secondo voi che strada potrei scegliere
>per evitare di droppare tutte le volte la tabella e ricrearla?
Ma l'inserimento incrementale che ottieni con la if exists è a mio avviso più che sufficiente.
Se il gestionale non ti passa più alcune righe ed esistono sulla tua tabella, cosa vorresti fare? cancellarle?
se sì, basta mettere un campo in più nella tabella contenente la data di modifica (univoca per processo che sta girando, non riga per riga, una sorta di data di riferimento).
Tutte quelle che hanno una data diversa alla fine del processo (e quindi che non sono state nè aggiornate nè inserite) le elimini.

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5