Errore Query di aggiornamento con tabelle relazionate

domenica 18 gennaio 2009 - 10.21

sanfra Profilo | Junior Member

salve a tutti, ho bisogno di capire perchè questa query mi dà errore in prossimità della scritta inner join:


c
UPDATE Prestazione INNER JOIN Cliente INNER JOIN prestazionecliente ON Cliente.idcliente = prestazionecliente.idcliente ON Prestazione.idprestazione = prestazionecliente.idprestazione SET Cliente.nome='Giuseppe' WHERE Cliente.idcliente=1


Sono disperato!

Grazie

lbenaglia Profilo | Guru

>salve a tutti, ho bisogno di capire perchè questa query mi dà
>errore in prossimità della scritta inner join:

Ciao Francesco,

Che DBMS utilizzi?

>Sono disperato!
Per così poco?

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

sanfra Profilo | Junior Member

Scusa se ho dimenticato di scrivere la cosa più importante il database è sql server 2005 Express Edition!

lbenaglia Profilo | Guru

>Scusa se ho dimenticato di scrivere la cosa più importante il
>database è sql server 2005 Express Edition!
OK.

SQL Server non ammette quella sintassi nel comando di UPDATE.
Qualcosa di simile può essere fatto specificando le JOIN nella clausola FROM:

UPDATE schema.tabella SET colonna = valore FROM schema.tabella JOIN schema.tabella2 ON...

Ad ogni modo non capisco perché nel tuo caso vorresti eseguire delle JOIN.
Da quanto hai scritto mi sembra di capire che le tabelle Prestazione e Cliente siano in relazione molti-a-molti tramite la tabella di giunzione PrestazioneCliente.
Comunque il tuo comando di UPDATE si limita ad aggiornare il nome del cliente per l'IDCliente = 1, quindi a che ti serve interrogare PrestazioneCliente e Prestazione?

Secondo me è sufficiente una banalissima:

UPDATE dbo.Cliente SET Nome = 'Giuseppe' WHERE IDCliente = 1;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

sanfra Profilo | Junior Member

L'esempio da me postato non ha incluso tutti i campi compresi anche quelli della tabella prestazione,in effetti fosse rimasta quella descritta da me nel primo post era sufficiente scrivere come hai detto tu.

Cmq ho rifatto la query con le JOIN in questo modo:

UPDATE Cliente SET Cliente.nome=@nome,Cliente.cognome=@cognome,Cliente.indirizzo=@indirizzo,Cliente.telefono=@telefono,Cliente.email=@email,Cliente.dataInserimento=@dataInserimento,Cliente.dataritiro=@dataritiro,Cliente.descrizione=@descrizione,Cliente.Evaso=@Evaso,Cliente.Lavorazione=@Lavorazione FROM Cliente JOIN prestazionecliente as pc ON pc.idcliente=Cliente.idcliente JOIN Prestazione SET prestazione=@prestazione,modulo=@modulo ON Prestazione.idprestazione=pc.idprestazione WHERE Cliente.idcliente=@idcliente

In questo caso mi dà ancora errore nella SET.

Perchè? mi sembra giusta

lbenaglia Profilo | Guru

>L'esempio da me postato non ha incluso tutti i campi compresi
>anche quelli della tabella prestazione,in effetti fosse rimasta
>quella descritta da me nel primo post era sufficiente scrivere
>come hai detto tu.
>
>Cmq ho rifatto la query con le JOIN in questo modo:
>
>UPDATE Cliente SET
>Cliente.nome=@nome,
>Cliente.cognome=@cognome,
>Cliente.indirizzo=@indirizzo,
>Cliente.telefono=@telefono,
>Cliente.email=@email,
>Cliente.dataInserimento=@dataInserimento,
>Cliente.dataritiro=@dataritiro,
>Cliente.descrizione=@descrizione,
>Cliente.Evaso=@Evaso,
>Cliente.Lavorazione=@Lavorazione
>FROM Cliente JOIN prestazionecliente as pc ON pc.idcliente=Cliente.idcliente
>JOIN Prestazione SET prestazione=@prestazione,modulo=@modulo
>ON Prestazione.idprestazione=pc.idprestazione WHERE Cliente.idcliente=@idcliente
>
>In questo caso mi dà ancora errore nella SET.
>
>Perchè? mi sembra giusta
Invece è sbagliata
Prima di tutto occorre precisare che il comando di UPDATE può aggiornare le colonne di UNA SOLA TABELLA, pertanto nel tuo caso dovrai scrivere 2 comandi di UPDATE distinti.
Secondo il comando di UPDATE ammette una sola clausola SET.
Per la sintassi completa fai riferimento ai Books Online:
http://msdn.microsoft.com/en-us/library/ms177523.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

sanfra Profilo | Junior Member

Innanzitutto grazie per il tuo interfvento immediato e preciso così da farmi arrivare a capire il vero problema e poi dirti appunto che ho risolto il problema grazie alle tue indicazione.!

Un ultima domanda se posso, ma in mysql(che uso ormai da anni)non è più semplice la gestione di questo tipo di query? E se è si allora, sql server non dovrebbe essere molto più efficente anche su questo tipo di realizzazioni?


Grazie ancora!

Alla prossima

lbenaglia Profilo | Guru

>Un ultima domanda se posso, ma in mysql(che uso ormai da anni)non
>è più semplice la gestione di questo tipo di query? E se è si
>allora, sql server non dovrebbe essere molto più efficente anche
>su questo tipo di realizzazioni?
Non conoscendo MySQL non sono in grado di rispondere alla tua domanda

>Grazie ancora!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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 !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5