Newsgroup: it.comp.appl.access
Titolo: SP di aggiornamento

Data questa SP:
set nocount on
UPDATE CorsistiPresenti SET
CorsistiPresenti.DatiCorsi_ID=CopiaCorsistiPresenti.DatiCorsi_ID
FROM dbo.CorsistiPresenti INNER JOIN
dbo.CopiaCorsistiPresenti ON
dbo.CorsistiPresenti.ID
 = 
dbo.CopiaCorsistiPresenti.ID
Mi succede che quasi tutti i record di corsistipresenti vengono aggiornati
col valore daticorsi_id del primo record di copiacorsisti presenti,
risultato: oltre 10000 record assumono lo stesso valore.
Non capisco cosa ci sia di sbagliato in questa sintassi.
Sib

Ma cosa deve fare questa sp?Non č che devi impostare una clausola Where per
delimitare i valori da aggiornare?
"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:EFbNa.21890$HU3.6...@news2.tin.it...


 delimitare i valori da aggiornare?
Grazie per la risposta, comunque e' bene scrivere dopo il quoting.
Cosa deve fare mi sembra abbastanza intuibile, deve prendere tutti i record
della tabella corsistipresenti che trovano corrispondeza nella tabella
copiacorsistipresenti (come puoi notare dall'INNER JOIN), fatto questo deve
aggiornare il campo DatiCorsi_ID della prima tabella con il corrispondente
campi della seconda.
In termini di selezione ci siamo, ma il valore preso (a mio giudizio per un
errore) e' sempre quello del primo record della seconda tabella.
Sib

 risultato: oltre 10000 record assumono lo stesso valore.
Ho impostato quest'altra sintassi:
update corsistipresenti set corsistipresenti.daticorsi_id=(select
copiacorsistipresenti.daticorsi_id from copiacorsistipresenti where
copiacorsistipresenti.id
=
corsistipresenti.id
)
Questa funzionerebbe, ma mi va in timeout perche' cosi' il server si trova a
fare olter 10000 select, mentre con l'INNER JOIN ci metterebbe pochissimi
secondi.
(so che funzionerebbe perche' se limito l'esecuzione a 100 record va tutto a
buon fine)
ma ripeto che l'altra sintassi (a mio giudizio correttissima) sarebbe molto
piu' efficiente.
Sib

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:b2cNa.22086$HU3.6...@news2.tin.it...

SqlServer predilige le Join, la subquery risulta MOLTO più lunga. Io
insisterei nel capire perchè l'UPDATE con la JOIN non funziona (a me
funzionano prefettamente)
Forse il tuo è solo un esempio di un batch più complicato in tal caso prova
a Semplificarla con gli Alias.
es..
UPDATE CorsistiPresenti SET
                DatiCorsi_ID=C.DatiCorsi_ID
FROM     CorsistiPresenti D INNER JOIN CopiaCorsistiPresenti C ON
 
D.ID
 = 
C.ID
Ciao Giorgio.

Sei Completamente Fuori Strada ...
"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:b2cNa.22086$HU3.6...@news2.tin.it...


 "Sib" <si...@SPAMiol.it> ha scritto nel messaggio

cut
No, ho copiaincollato la sintassi della sp direttamente, il codice e'
proprio quello.
La cosa e' talmente semplice che temo possa trattarsi di qualche sp che mi
manca.
Sib

 Sei Completamente Fuori Strada ...
olter al fatto che non sai quotare, mi sembra piuttosto che tui sia asciutto
per quanto riguarda la sintassi delle sp
Sib

Non Giudicare Mai Le Persone
Prima Di Conoscerle, Potresti Sbagliarti
"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:X8dNa.22742$HU3.6...@news2.tin.it...



Controlla di avere l'ultima Sp con "SELECT @@Version" la vesrione relativa a
Sp3 è
Microsoft SQL Server  2000 - 8.00.760 (Intel X86)
Ciao Giorigo.

 Prima Di Conoscerle, Potresti Sbagliarti
A parte che il fatto che non sai quotare non e' confutabile perche' e'
evidente e a parte anche il fatto che devi avere un difetto al tasto shift,
mi pare che invece tu non ti sia fatto scrupolo a giudicare (sbagliando
clamorosamente) la sintassi che ho utilizzato.
Sib

 Io Non Saprò Quotare, Ma In Quanto a Stored Procedure ...
UhoooOOOooo!
allora dimmelo tu perche' la prima sintassi non funziona e la seconda si'.
Sib

 La Seconda Intendi Quella Che Va In TimeOut
Due ne ho postate, non c'e' molto da pensarci su.
Se hai bisogno di saperlo, va in timeout perche' esegue una select per ogni
record (come avevo gia' evidenziato in precedenza) d'altro canto (sempre
come avevo già detto) non condivido quella sintassi che invece viene
addirittura suggerita come migliore da alcuni testi (SQL Server Guida
completa - Apogeo) (sto sempre parlando della seconda).
Per il resto sto ancora aspettando che tu mi illumini dall'alto delle tue
conoscenze.
Sib