46 messaggi dal 11 ottobre 2002
ricording.anolli.it
Ciao a tutti,
questa query che ha sempre funzionato ritorna l'errore:

La subquery ha restituito più di un valore. Ciò non è consentito per subquery che seguono i caratteri =, !=, <, <= , >, >= o utilizzate come espressione.
L'istruzione è stata interrotta.

UPDATE dbo.tbPosizioni
SET OperatoreInModifica = Null
WHERE
dbo.tbPosizioni.OperatoreInModifica = @Operatore


Ora mi chiedo, visto che ha sempre funzionato e che altre, simili, tipo la seguente funziona correttamente:

UPDATE dbo.tbOrdiniTestata
SET OperatoreInModifica = null
WHERE
dbo.tbOrdiniTestata.OperatoreInModifica = @Operatore



può essere un problema sulla tabella tbPosizioni?????
se si, come risolverlo??

grazie

-------------
Andrea Anolli

"Qualunque cosa si dica in giro, parole e idee possono cambiare il mondo"
L'Attimo Fuggente
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
andrea.anolli ha scritto:
Ciao a tutti,
questa query che ha sempre funzionato ritorna l'errore:

La subquery ha restituito più di un valore. Ciò non è consentito per subquery che seguono i caratteri =, !=, <, <= , >, >= o utilizzate come espressione.
L'istruzione è stata interrotta.

UPDATE dbo.tbPosizioni
SET OperatoreInModifica = Null
WHERE
dbo.tbPosizioni.OperatoreInModifica = @Operatore


Sei sicuro che l'errore sia li dove l'hai indicato?
Il tipo di errore che riporti è tipico di una istruzione del tipo

UPDATE tabella
SET campo = (SELECT qualchecosa)
WHERE condizione

Se la "SELECT qualchecosa" ritorna un solo valore nessun problema; se ne restituisce 2 o più viene evidenziato l'errore a cui ti riferisci...

Bye
46 messaggi dal 11 ottobre 2002
ricording.anolli.it
si, ho eseguito la query cos' come indicato direttamente da SQL Analyzer per esserne certo....

-------------
Andrea Anolli

"Qualunque cosa si dica in giro, parole e idee possono cambiare il mondo"
L'Attimo Fuggente
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Come puoi vedere in questo esempio che ho riprodotto, definendo e popolando una tabella come

============================
CREATE TABLE dbo.dbOrdiniTestata
(
ID SMALLINT NOT NULL,
Operatore SMALLINT NULL,
Campo VARCHAR(20) NOT NULL
)
GO

INSERT dbo.dbOrdiniTestata VALUES (1, 1, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (2, 2, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (3, 2, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (4, 1, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (5, 3, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (6, 1, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (7, 4, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (8, 5, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (9, 5, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (10, 3, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (11, 1, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (12, 6, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (13, 7, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (14, 6, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (15, 4, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (16, 8, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (17, 4, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (18, 5, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (19, 7, 'XXXXXXXXX')
INSERT dbo.dbOrdiniTestata VALUES (20, 3, 'XXXXXXXXX')
GO
============================

eseguendo un'istruzione del tipo

UPDATE dbo.dbOrdiniTestata
SET Operatore = NULL
WHERE Operatore = 3

non viene sollevata alcuna eccezione. Un'eccezione viene sollevata nel caso in cui venga utilizzata una sintassi del tipo

UPDATE dbo.dbOrdiniTestata
SET Operatore = (SELECT ID FROM dbo.dbOrdiniTestata WHERE Operatore = 2)
WHERE Operatore = 3

oppure se eseguo

UPDATE dbo.dbOrdiniTestata
SET Operatore = NULL
WHERE Operatore = (SELECT ID FROM dbo.dbOrdiniTestata WHERE Operatore = 2)

in entrambi i casi mi viene restituito il messaggio

Server: Msg 512, Level 16, State 1, Line 3
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

Lo stesso avviene se nella tabella è definito un trigger che esegue un'istruzione simile a quella di cui sopra. Se sei sicuro che l'istruzione che va in errore sia quella che hai indicato non ti resta che verificare il codice del trigger sull'evento di update della tabella...

Bye
46 messaggi dal 11 ottobre 2002
ricording.anolli.it
Si, effettivamente ho trovato un trigger su Update che restituiva + di una riga.

Stavo impazzendo....


Grazie

-------------
Andrea Anolli

"Qualunque cosa si dica in giro, parole e idee possono cambiare il mondo"
L'Attimo Fuggente

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.