|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2008
Messaggi: 82
|
[SQL] Scrivere funzione di controllo sui record
Salve a tutti,
conosco solo le basi dell'SQL e non ho ben capito se si può fare quello che ho in mente. I record di una tabella (per come viene compilata) devono rispettare determinate regole: Se un campo1 ha valore 0 (può assumere solo due valori) devo considerere il valore di altri 2 campi e verificare che al record successivo questi 2 campi abbiano lo stesso valore mentre il campo1 abbia valore 1. Se verifico che la tabella segue questo schema allora non ho avuto "errori" in fase di compilazione. Ricapitolando in una sorta di pseudo codice, per tutta la tabella dovrei fare qualcosa del genere Codice:
If campo1_rec1 = 0 { valore1 = campoX_rec1, valore2 = campoY_rec1 If campo1_rec2=0 { ERRORE } ELSE { valore1b = campoX_rec2, valore2b = campoY_rec2 if (( valore1!=valore1b) OR (valore!=valore2b) { ERRORE } } } Grazie. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Si puo' fare.
In SQL Standard pero' sono 2 paia di wallas. Che motore hai? PS: Se mi dici MySql lascio subito per principio. So che su questo forum sono vietate le apologie, ma ho deciso che MySql non sara' piu' una mia opzione a priori. Inoltre, cosa significa "Al record successivo", dato che per l'SQL i record di una tabella non hanno alcun ordine preferenziale particolare? (Ogni volta che leggi da una tabella, senza imporre alcun ORDER BY, i record possono essere restituiti in un ordine qualsiasi, anche apparentemente casuale).
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2008
Messaggi: 82
|
Grazie gugoXX,
per motore cosa intendi? Io uso SQL SERVER Express 2005, ti servono altre info? Ogni record ha un campo Identificativo univoco autoincrementato dal db stesso e su cui sono sicuro di non avere problemi... quindi direi richiamando i record con un ORDER BY CampoIdentificativoUnivoco. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Sisi', per motore intendevo proprio l'engine, SqlServer per esempio.
Vediamo...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ecco, chiamati ciu l'identificatore univoco
campos2 il primo campo di cui testare l'uguaglianza, campos3 il secondo campo di cui testare l'ugliaglianza Codice:
SELECT COUNT(*) FROM tab AS t1 WHERE campo1=0 AND EXISTS (SELECT 1 FROM tab AS t2 WHERE t2.ciu = t1.ciu+1 AND (t2.campo1!=1 OR t2.campos2!=t1.campos2 OR t2.campos3!=t2.campos3 ) ) Errore significa che la query restituira' qualcosa di diverso da 0 (o da NULL se la tabella e' vuota)
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Apr 2008
Messaggi: 82
|
Grazie gugoXX provo subito!
![]() |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Apr 2008
Messaggi: 82
|
Adattato ai veri nomi e... FUNZIONA!!!!!
![]() Grazie mille davvero! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:05.