PDA

View Full Version : sql riga valori nulli


The March
09-04-2004, 09:44
Ola a todos,
faccio una select in sql e pare che tutto funziona bene, l'unico problema è che restituisce sempre, in qualsiasi caso una riga con null (anche il campo id) sia che abbia trovato dei record che no, in fondo ci mette sempre sta cazz di riga, cosa può essere?

il fatto è che è in una stored procedure: vi posto il codice:



CREATE PROCEDURE SPreportVerbaliDaAs
(
@P_DT_END datetime,
@P_DT_START datetime,
@FA_CODICE varchar(4),
@imp_amministratore int,
@imp_manutentore int
)
AS


declare @CodiceSql varchar (2000)

set @CodiceSql = 'select a.ver_id, ver_data, ver_scadenza, ver_stato,ver_datasped, ver_protocollo, ver_note
from commessa d
left join impianto e on d.co_id=e.co_id '

if @imp_amministratore > ''
begin
set @CodiceSql = @CodiceSql + 'AND E.IMP_AMMINISTRATORE=''' + cast(@imp_amministratore as varchar) + ''' '
end

if @imp_manutentore > ''
begin
set @CodiceSql = @CodiceSql + 'AND E.IMP_MANUTENTORE=''' + cast(@imp_manutentore as varchar) + ''' '
end




set @CodiceSql = @CodiceSql + 'left join verbale a on a.imp_id=e.imp_id
left join intervento b on a.ver_id=b.ver_id and b.int_dataprev=(select min(int_dataprev) from intervento c where c.ver_id=b.ver_id)
where d.fa_codice=''' + @FA_CODICE + ''' and ag_id is null '

if isdate(@P_DT_END) = 1
begin
set @CodiceSql = @CodiceSql + ' and b.int_dataeffet >= ''' + CAST(@P_DT_END AS VARCHAR) + ''' '
end

if isdate(@P_DT_START) = 1
begin
set @CodiceSql = @CodiceSql + ' and b.int_dataeffet <= ''' + CAST(@P_DT_START AS VARCHAR) + ''' '
end

exec (@CodiceSql)


in pratica ho 4 tabelle:
commessa
impianto
verbale
intervento

come avrete notato la select va filtrata...
in commessa il fa_codice
in impianto il manutentore e l'amministratore
in verbale ag_id deve essere nullo
le date vanno verificate su un campo int_dataprev, dala tabella intervento, prendendo però l'intervento più vecchio

mailand
09-04-2004, 10:51
fammi capire meglio... nei dati della tabella tu non hai campi blank o null, giusto? la riga di vampi vuoti esce per caso sempre in coda ai dati? che editor usi per fare la query?
perchè se nei dati hai dei blank (degli spazi banalmente) dovresti provare a mettere ove possibile una condizione where trim(nomecampo) is not null, in questo modo selezioni solo i campi valorizzati
inoltre alcuni editor sql visualizzano come ultima riga una riga nulla (cmq dovrebbe portare anche il numero di righe selezionate), oppure in casi di nessuna riga selezionata riportano l'intestazione delle colonne con una riga vuota, ma di solito da qualche parte nella finestra dice qualcosa tipo "no rows returned"...

The March
09-04-2004, 10:54
Originariamente inviato da mailand
fammi capire meglio... nei dati della tabella tu non hai campi blank o null, giusto? la riga di vampi vuoti esce per caso sempre in coda ai dati? che editor usi per fare la query?
perchè se nei dati hai dei blank (degli spazi banalmente) dovresti provare a mettere ove possibile una condizione where trim(nomecampo) is not null, in questo modo selezioni solo i campi valorizzati
inoltre alcuni editor sql visualizzano come ultima riga una riga nulla (cmq dovrebbe portare anche il numero di righe selezionate), oppure in casi di nessuna riga selezionata riportano l'intestazione delle colonne con una riga vuota, ma di solito da qualche parte nella finestra dice qualcosa tipo "no rows returned"...

uso query analyzer e eterprise manager di microsoft sql server
la riga di nulli me la restituisce in 2 query (su 5 che devo fare) non ho campi blank, ma il fatto è che mi da una riga di null con l'id null... comunque la mete sempre in coda, penso che il problema sia solo nella select...

mailand
09-04-2004, 11:01
se l'id dovesse sempre essere valorizzato, prova a fare il trucco dell'esclusione con la trim sul campo id...

The March
09-04-2004, 11:07
Originariamente inviato da mailand
se l'id dovesse sempre essere valorizzato, prova a fare il trucco dell'esclusione con la trim sul campo id...

trim non esiste nel mio db, posso mettere una condizione da levare le righe null, però volevo risolvere il problema alla radice, sono convinto che c'è qualcosa che non va nella select...

mailand
09-04-2004, 11:12
ad occhio non mi sembra, però tutto può essere...
semmai prova a mettere una chiave primaria sulle tabelle per le righe duplicate, e a mettere not null alcuni campi, se non ti accetta le abilitazioni il problema potrebbero essere alcuni dati incoerenti...

The March
09-04-2004, 11:14
Originariamente inviato da mailand
ad occhio non mi sembra, però tutto può essere...
semmai prova a mettere una chiave primaria sulle tabelle per le righe duplicate, e a mettere not null alcuni campi, se non ti accetta le abilitazioni il problema potrebbero essere alcuni dati incoerenti...

no no non centra niente quello, le select che ho fatto sono tutte sulle stesse tabelle, con condizioni diverse... e pare che ho trovato il problema....

ma per spiegarmi il perchè ci vuole un esperto di sql...


ad un certo punto c'è una condizione: ag_id is null
se invece di is ci metto = mi trova meno valori ma non mi restituisce la riga nulla..... perchè?????? devo ancora verificare cosa fa di preciso... corro!

The March
09-04-2004, 11:28
ho trovato la soluzione!

http://march.altervista.org/Emotions/3.gif

quasi mi vergogno a scriverla...
era una banalità....


facevo la join con la tabella verbale (che era quella che dovevo visualizzare) con una left..... bisognava usare right altrimenti prendeva anche gli impianti senza verbali..... e quindi metteva dei verbali con campi nulli... anche se funziona ancora adesso devo spiegarmi la differenza tra is e =....
mah!

mailand
09-04-2004, 11:43
ti ho risposto nell'altro post! ;)
purtroppo non sempre riesco a focalizzare il problema sulle join non conoscendo esattamente le tabelle...
chettedevodì, sarò un po' niubbo... :D

The March
09-04-2004, 11:48
Originariamente inviato da mailand
ti ho risposto nell'altro post! ;)
purtroppo non sempre riesco a focalizzare il problema sulle join non conoscendo esattamente le tabelle...
chettedevodì, sarò un po' niubbo... :D

figurati, non avendo davanti lo schema delle tabelle è normale non capire le join...