91 messaggi dal 27 ottobre 2009
Ciao a tutti,
con questa select:

"SELECT Utenti.username, Controls.name, Controls.active, Controls.id, Utenti.id FROM Controls INNER JOIN Utenti ON [page]=@page AND [username]=@username"

unisco le tabelle Controls e Utenti, filtrando i risultati con due DropDownList.

La select lavora correttamente, solo che il numero ID restituito non e' univoco e non riesco ad aggiornare correttamente i records.
In altre parole aggiorno in un solo colpo anche i records di un altro utente.
Questa l'istruzione update:
"UPDATE Controls SET active = @active FROM Controls INNER JOIN Utenti ON (Controls.id = @id AND Utenti.username = @username)"

Ora l'ID e': 12345 poi 12345 etc. per ogni utente.
Dovrei invece avere invece 1 2 3 4 5 6 7 8 9 10 11 12... 20

Dove sbaglio?
Modificato da thedoors il 24 luglio 2014 11.56 -
156 messaggi dal 01 dicembre 2010
Strana quella query di UPDATE

---- solitamente la struttura è:
UPDATE
NomeTabella1
SET
NomeCampo1 = xxxx
Nomecampo2 = yyyy


---- Tu invece fai: ????? -- Quel FROM la in mezzo ???
UPDATE
NomeTabella1
SET
NomeCampo1 = xxxx
Nomecampo2 = yyyy
FROM
NomeTabella1
INNER JOIN
NomeTabella2
ON ..... = .....


---- Prova a fare cosi:
UPDATE
NomeTabella1
INNER JOIN
NomeTabella2
ON ..... = .....
SET
NomeCampo1 = xxxx
Nomecampo2 = yyyy


Facci saper
.
Modificato da nman il 24 luglio 2014 12.04 -
91 messaggi dal 27 ottobre 2009
Ciao e grazie per la risposta.
Ho provato cosi':

UPDATE Controls INNER JOIN Utenti ON (Controls.id = @id) SET active = @active

pero' mi restituisce l'errore:
(Sintassi non corretta in prossimita' della parola chiave 'INNER'.)


Non pensi pero' che dovrei rivedere la SELECT?
Infatti se la SELECT fosse corretta, mi basterebbe un semplice UPDATE del tipo:
UPDATE Controls SET active = @active FROM Controls WHERE (Controls.id = @id)

Il problema e' che la SELECT restituisce un ID NON UNIVOCO, quindi e' chiaro che con l'UPDATE i records con ID 1 (esempio) sono piu' di uno; uguali al numero degli utenti, per l'esattezza.
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
la tua formulazione
UPDATE dbo.xx
  SET col = value
  FROM dbo.x x
    JOIN dbo.zz z ON z.col = x.col;


e' sintatticamente corretta.
il problema tuo deriva dal fatto che la join che effettua ritorna N righe in quanto probabilmente dbo.zz e' (nell'ordine delle cose), la tabella "dettaglio" di una implementazione Master/Detail...

saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
91 messaggi dal 27 ottobre 2009
Ciao e grazie per la risposta.
Si, sintatticamente e' corretta, però non aggiorna come dovrebbe.

Ora, le tabelle sono Utenti e Controls unite con INNER JOIN.
Quello che vorrei fare e' aggiornare un solo record della nuova tabella restituita con questa SELECT:

SELECT Utenti.username, Controls.name, Controls.active, Controls.id, Utenti.id AS TotalID FROM Controls INNER JOIN Utenti ON [page]=@page AND [username]=@username


la tabelle restituita:
  
id  username   name                active
1   admin      DDL1                True
2   admin      DDL2                False
3   admin      Aggiorna Sitemap    True
4   admin      Invia Sitemap       False
1   pippo      DDL1                True
2   pippo      DDL2                False
3   pippo      Aggiorna Sitemap    True
4   pippo      Invia Sitemap       False
  


Ho provato anche a creare una nuova colonna ID con Utenti.id AS OthersID,
ma il risultato e' questo:
1111 2222 3333 4444
L'idea e' quella di creare una nuova colonna tipo:
1 2 3 4 5 6 7 8 9 10...

E' la strada giusta?
Modificato da thedoors il 24 luglio 2014 17.21 -
91 messaggi dal 27 ottobre 2009
Con questa istruzione:

UPDATE Controls SET active = @active FROM Controls INNER JOIN Utenti ON (Controls.id = @id)

se modifico il primo campo della colonna active (username: admin) con False, si modifica anche pippo.
Il risultato e' questo:

id  username   name                active

1   admin      DDL1                  False 
2   admin      DDL2                True
3   admin      Aggiorna Sitemap    True
4   admin      Invia Sitemap       True
1   pippo      DDL1                  False
2   pippo      DDL2                True
3   pippo      Aggiorna Sitemap    True
4   pippo      Invia Sitemap       True

91 messaggi dal 27 ottobre 2009
Questa e' la tabella Utenti
id  username
   
1   admin      
2   pippo

Questa la tabella Controls

id   name                active

1    DDL1                True
2    DDL2                True
3    Aggiorna Sitemap    True
4    Invia Sitemap       True

Questa la SELECT:
SELECT Utenti.username, Controls.name, Controls.active, Controls.id, Utenti.id AS TotalID FROM Controls INNER JOIN Utenti ON [page]=@page AND [username]=@username

Questo il risultato della SELECT

id  username   name                active

1   admin      DDL1                True
2   admin      DDL2                True
3   admin      Aggiorna Sitemap    True
4   admin      Invia Sitemap       True
1   pippo      DDL1                True
2   pippo      DDL2                True
3   pippo      Aggiorna Sitemap    True
4   pippo      Invia Sitemap       True




Questa l'istruzione UPDATE
UPDATE Controls SET active = @active FROM Controls INNER JOIN Utenti ON (Controls.id = @id)

e il risultato se modifico il primo campo della colonna active (username: admin) con False:
id  username   name                active

1   admin      DDL1                  False 
2   admin      DDL2                True
3   admin      Aggiorna Sitemap    True
4   admin      Invia Sitemap       True
1   pippo      DDL1                  False
2   pippo      DDL2                True
3   pippo      Aggiorna Sitemap    True
4   pippo      Invia Sitemap       True

mi modifica anche pippo!

Come faccio invece a modificare solo il primo record (campo della colonna active)?
Modificato da thedoors il 24 luglio 2014 18.17 -
91 messaggi dal 27 ottobre 2009
C'e' qualcuno che sa dirmi almeno se si puo' fare?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.