Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Query insert e numeri
giovedì 04 gennaio 2007 - 14.37
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
crosino75
Profilo
| Newbie
6
messaggi | Data Invio:
gio 4 gen 2007 - 14:37
ciao a tutti,
mi trovo in questa situazione:
ho un database già esistente e non modificabile nel quale esiste una colonna "codice" con valori indicizzati e duplicati non ammessi; es:
1000
1001
1002
1003
1005
etc..etc..
ecco,
io vorrei creare un processo che mi consenta di scovare il buco mancante nella sequenza (nell esempio 1004) e di riempire il buco con un nuovo articolo.
avevo pensato ad un qualcosa del tipo se la query con ID 1000 non riesce, passa al valore 1001... 1002...1003... 1004 = ecco riuscita!
Ma non so se sia la strada corretta, come posso fare?
Grazie
Emanuele
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 4 gen 2007 - 15:21
>ciao a tutti,
>
>mi trovo in questa situazione:
>ho un database già esistente e non modificabile nel quale esiste
>una colonna "codice" con valori indicizzati e duplicati non ammessi;
>es:
>
>1000
>1001
>1002
>1003
>
>1005
>
>etc..etc..
>
>ecco,
>io vorrei creare un processo che mi consenta di scovare il buco
>mancante nella sequenza (nell esempio 1004) e di riempire il
>buco con un nuovo articolo.
>
Immagino che il db di cui stai parlando sia Access, giusto?
poi, quella colonna, che è di una particolare tabella, è autoincrementante? è un contatore insomma?
Se rispondi a queste domande possiamo procedere oltre..
>Grazie
>
>Emanuele
Ciao!
>
>
Alx81 =)
http://blogs.dotnethell.it/suxstellino
crosino75
Profilo
| Newbie
6
messaggi | Data Invio:
gio 4 gen 2007 - 15:36
no, putroppo non è un contatore auto incrementante e non posso modificare le attuali opzioni di colonna; il DB è access
grazie
ema
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 5 gen 2007 - 09:51
>no, putroppo non è un contatore auto incrementante e non posso
>modificare le attuali opzioni di colonna; il DB è access
Se potessi aggiungere una colonna alla tabella incriminata che prende il valore del campo codice + 1, poi ti basterebbe una self join fatta in questo modo..
Supponiamo di avere una tabella denominata Table1 con all'interno i seguenti campi:
id numerico
idsucc numerico con default a id + 1
con la seguente query ricavi il primo libero:
SELECT TOP 1 Table1.idsucc
FROM Table1 T1
LEFT OUTER JOIN Table1 AS T2
ON T1.idsucc = T2.id
WHERE T2.id IS NULL
ORDER BY Table1.idsucc;
In poche parole metto la tabella in left join con se stessa (prendo quindi tutti i valori di quella a sinistra, inclusi quelli che non trovo nella tabella di destra) per idsucc della prima (quello che mi aspetto ci sia) e id della seconda (quello che c'è)..
Ricavando il primo record con la parte destra a NULL ottengo il primo valore disponibile..
Se non puoi aggiungere una colonna, controlla se puoi fare un campo calcolato al volo nella query..
Spero possa esserti comunque di aiuto..
ciao!
>
>grazie
>
>ema
Alx81 =)
http://blogs.dotnethell.it/suxstellino
paroca
Profilo
| Newbie
5
messaggi | Data Invio:
lun 8 gen 2007 - 10:01
prova così:
SELECT TOP 1 SUCCESSIVO FROM (SELECT (ID + 1) AS SUCCESSIVO FROM TABELLA)
WHERE SUCCESSIVO NOT IN (SELECT ID FROM TABELLA)
Miao
Paroca
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
lun 8 gen 2007 - 10:38
>prova così:
>
>SELECT TOP 1 SUCCESSIVO FROM (SELECT (ID + 1) AS SUCCESSIVO FROM
>TABELLA)
>WHERE SUCCESSIVO NOT IN (SELECT ID FROM TABELLA)
Attenzione, questa not in con all'interno la select dell'id di TABELLA, esegue un tablescan..
è preferibile una join, che è molto più performante.. magari non te ne accorgi con pochi dati.. ma con grandi quantità di informazioni, la differenza si sente..
cmq, ottimizzando la mia consiglio questa soluzione:
SELECT TOP 1 a.id + 1 AS Id_Voluto
FROM TABELLA a
LEFT JOIN TABELLA b
ON a.id + 1 = b.id
WHERE b.id + 1 IS NULL
>
>Miao
Miao!
>Paroca
Alx81 =)
http://blogs.dotnethell.it/suxstellino
paroca
Profilo
| Newbie
5
messaggi | Data Invio:
lun 8 gen 2007 - 11:17
MOLTO VERO..
gli IN rallentano molto..
Meglio quella ottimizzata.
Miao
Paroca
crosino75
Profilo
| Newbie
6
messaggi | Data Invio:
lun 8 gen 2007 - 12:40
Grazie di cuore ragazzi... HO RISOLTO!
siete fantastici!
Emanuele
Torna su
Stanze Forum
Elenco Threads
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 !