PDA

View Full Version : help sql ... t-sql ...


The March
19-03-2004, 16:21
devo modificare delle funzioni In SQL e mi sono imbattuto in una serie di comandi che sono riuscito a modificare e a far funzionare anche se non mi sono per niente chiari.... ora vi posto il codice....


declare c_sedi cursor for http://march.altervista.org/Emotions/Domanda.gif
select sd_indirizzo, sd_cap, sd_citta, pr_codice, nz_descrizione
from certificato_sede a
left join sede b on a.sd_id = b.sd_id
left join nazione c on b.nz_codice = c.nz_codice and c.nz_codice <> 'ITA'
where ce_id = @ce_id and b.ts_codice not in ('LEGA', 'SEDE')

open c_sedi http://march.altervista.org/Emotions/Domanda.gif
fetch c_sedi into @sd_indirizzo, @sd_cap, @sd_citta, @pr_codice, @nz_descrizione http://march.altervista.org/Emotions/Domanda.gif
if @@fetch_status = -2 http://march.altervista.org/Emotions/Domanda.gif
begin
close c_sedi http://march.altervista.org/Emotions/Domanda.gif
deallocate c_sedi http://march.altervista.org/Emotions/Domanda.gif
end

while @@fetch_status = 0
begin
if @sd_indirizzo is not null
begin
set @sedestring = @sedestring + char(13) + isnull(@sd_indirizzo,'') + ' - ' + isnull(@sd_cap,'') + ' ' + isnull(@sd_citta,'') + ' (' + isnull(@pr_codice,'') + ')'
end
fetch c_sedi into @sd_indirizzo, @sd_cap, @sd_citta, @pr_codice, @nz_descrizione http://march.altervista.org/Emotions/Domanda.gif
end
close c_sedi
deallocate c_sedi
return @sedestring


spero si capisca ho semplicemente copiato il codice...

io per ora ho visto solo l'sql e ho dei problemi a capire le righe dove ho messo la faccina..

grazie di tutto!

p.s.
scusate se è pieno di http://march.altervista.org/Emotions/Domanda.gif ovunque :D

maxithron
19-03-2004, 17:37
il tuo problema è interpretare "c_sedi" che evidentemente per chi ha scritto il codice vuol significare:



cursor_sedi



riferendosi quindi all'uso dei cursori in sql.

Ma è notoriamente sconsigliato l'utilizzo di cursori al posto del metodo t -sql dato che i cursori sono "costosi" in termini di risorse perchè provocano overhead di cache.

Per maggiori info:

http://www.google.it/search?hl=it&ie=UTF-8&oe=UTF-8&q=sql+e+cursori&btnG=Cerca+con+Google&lr=lang_it

The March
19-03-2004, 17:43
Originariamente inviato da maxithron
il tuo problema è interpretare "c_sedi" che evidentemente per chi ha scritto il codice vuol significare:



cursor_sedi



riferendosi quindi all'uso dei cursori in sql.

Ma è notoriamente sconsigliato l'utilizzo di cursori al posto del metodo t -sql dato che i cursori sono "costosi" in termini di risorse perchè provocano overhead di cache.

Per maggiori info:

http://www.google.it/search?hl=it&ie=UTF-8&oe=UTF-8&q=sql+e+cursori&btnG=Cerca+con+Google&lr=lang_it


fai finta di parlare con uno che non ha mai visto il t-sql :asd: e prova a spiegargli cosa sia un cursore e @@fetch_status.... se ti viene più semplice fai analogie con vb ....
thanks

p.s.
Il problema dell'overhead non mi si propone... 1 è un db per la gestione interna di una dittà che per quanto grossa che sia non farà mai un overhead di cache
2 io sono solo un povero tirocinante che deve fare un piccolo update sul db....:(

maxithron
20-03-2004, 10:30
Dato che quello che chiedi è molto ampio, mi permetto di rimandarti alla lettura di questo link che ti spiega proprio tutto:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_globals_1c1f.asp

The March
22-03-2004, 10:26
Originariamente inviato da maxithron
Dato che quello che chiedi è molto ampio, mi permetto di rimandarti alla lettura di questo link che ti spiega proprio tutto:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_globals_1c1f.asp


Grazie!

Non sapevo che l'msdn fosse anche onlyne!

però ora ti devo chiedere comunque qualcosa per vedere se ho capito...

il fetch status restituisce un integer che a seconda del suo valore indica lo stato di un cursore
un cursore è come se fosse un vettore? mi per di aver capito che si può fare un cursore per più campi e per più record... come funziona? (molto semplicemente)


ora ti chiedo anche qualche conferma sul funzionamento della mia funzione....

arrivo ad un punto in cui 'è:
declare .... cursor for
select

in pratica fa la select e mette il risultato nel cursore? poi quando lo apre e fa into @.... mette tutti i valori nelle variabili fono a quando il fetch_status arriva a 0... funziona così?


p.s.
per favore non reinviarmi nelle msdn... se hai tempo o possibilità mi bastano anche solo un paio di commentini a fianco alle righe...
grazie comunque per avermi risposto!

The March
22-03-2004, 12:45
Originariamente inviato da The March
Grazie!

Non sapevo che l'msdn fosse anche onlyne!

però ora ti devo chiedere comunque qualcosa per vedere se ho capito...

il fetch status restituisce un integer che a seconda del suo valore indica lo stato di un cursore
un cursore è come se fosse un vettore? mi per di aver capito che si può fare un cursore per più campi e per più record... come funziona? (molto semplicemente)


ora ti chiedo anche qualche conferma sul funzionamento della mia funzione....

arrivo ad un punto in cui 'è:
declare .... cursor for
select

in pratica fa la select e mette il risultato nel cursore? poi quando lo apre e fa into @.... mette tutti i valori nelle variabili fono a quando il fetch_status arriva a 0... funziona così?


p.s.
per favore non reinviarmi nelle msdn... se hai tempo o possibilità mi bastano anche solo un paio di commentini a fianco alle righe...
grazie comunque per avermi risposto!



non fateci caso...
ho capito tutto!