Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [sql server 2008] update

    Ciao a tutti,

    ho un problemino con una STORED PROCEDURE vi allego una piccola parte della stessa che va in errore. Eseguendo l'update il sistema restituisce il seguente errore:

    Msg 512, Level 16, State 1, Line 1

    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.



    codice:
    truncate table    DBFOREW..CDG_ESTRAZ_ORE
    
    insert into        DBFOREW..CDG_ESTRAZ_ORE
    
    select distinct    risultati.azienda    AS    CDC
    ,                aziende.ragione_b    AS    DESCRIZIONE
    
    ,                risultati.data        AS    DATA
     
    ,0                    AS    ORE_LAVORATE
           
    ,0                    AS    ORE_ASS_IN_OUT
     
    ,0                    AS    ORE_FOR_IN_OUT
    
    ,                GETDATE()            AS    DATA_MODIFICA
    
    from            risultati
        JOIN        aziende
    on        risultati.azienda = aziende.azienda
    
    where            causale in (select causale from gruppi_causali_c where gruppo = 'FPHL' and azienda = '0000000001')
    and        data between 
    '2014-05-01' and '2014-05-31'
     
    order by        CDC,DATA
    ----------------------------------------------
    --SELECT * FROM DBFOREW..CDG_ESTRAZ_ORE
    -----------------------------------------------
    --UPDATE ORE_LAVORATE 
    -----------------------------------------------
    update                    DBFOREW..CDG_ESTRAZ_ORE
    
    set        ORE_LAVORATE =        (
                                SELECT SUM (ORE/
    3600.)
    
    FROM        erg_pedus..risultati         AS risultati
    JOIN    DBFOREW..CDG_ESTRAZ_ORE
    ON    CDG_ESTRAZ_ORE.DATA = risultati.data
    
    WHERE        causale in (select causale from gruppi_causali_c where gruppo = 
    'FPHL' and azienda = '0000000001')
    and    RISULTATI.data between 
    '2014-05-01' and '2014-05-31'
    
    group by    risultati.azienda,risultati.data
    
                                )
    
    ,        DATA_MOODIFICA =    GETDATE()
    Eseguendo la select all'interno dell'update i risultato viene visualizzato correttamente.

    Grazie
    IncorrectSyntax

  2. #2
    da qualche parte una query che dovrebbe restituirti UN valore te ne restituisce più di uno

    es

    set ORE_LAVORATE =(SELECT ore FROM tabella)

    quel "SELECT ore FROM tabella" ti restituirà N record invece di UNO, e questo è sbagliato

  3. #3
    Hai certamente ragione ... probabilmente la logica è sbagliata ... Anche perché quella sum dovrebbe raccogliere un certo totale ore raggruppato per data e cdc (codice) e parliamo di qualcjhe migliaio di record che dovrebbero andare a sostituire gli "zero" inseriti tramite la insert all'inizio della query .... Puoi aiutarmi in qualche modo?
    IncorrectSyntax

  4. #4
    spiega bene il problema, la struttura delle tabelle coinvolte e di come sono correlate da loro

  5. #5

    update

    Quote Originariamente inviata da optime Visualizza il messaggio
    spiega bene il problema, la struttura delle tabelle coinvolte e di come sono correlate da loro
    La tabella di destinazioe delle update viene creata ad hoc e popolata in questo modo:
    codice:
    INSERT INTO CDG_ESTRAZ_ORE 
    select distinct 
    risultati.azienda        CDC
    ,aziende.ragione_b        DESCRIZIONE
    ,risultati.data            DATA
    ,0                        ORE_LAVORATE,0                        ORE_ASS_IN_OUT
    ,0                        ORE_FOR_IN_OUT
    GETDATE()                DATA_MODIFICA       
    
    from risultati
    JOIN        aziende
    on        risultati.azienda = aziende.azienda      
    
    where causale in(select causale from gruppi_causali_c where gruppo ='FPHL'and azienda ='0000000001')
    and        data between'2014-05-01'and'2014-05-31'    
    order by        CDC,DATA
    
    Le ore da prelevare (ORE_LAVORATE) sono archiviate nella tabella dei risultati per azienda,data e causale, perciò prelevo tutti i record con le causali facenti parti del gruppo ore lavorate.
    codice:
    update DBFOREW..CDG_ESTRAZ_ORE
    set ORE_LAVORATE = (
    SELECT SUM(ORE/3600.) ORE_LAVORATE
    FROM        erg_pedus..risultati risultati
    JOIN    DBFOREW..CDG_ESTRAZ_ORE
    ON    risultati.data= CDG_ESTRAZ_ORE.DATA          and    risultati.azienda = CDG_ESTRAZ_ORE.CDC
    WHERE        causale in(select causale from gruppi_causali_c where gruppo ='FPHL'and azienda ='0000000001')
    and    RISULTATI.data between'2014-05-01'and'2014-05-31'
    groupby    risultati.azienda,risultati.
    data
    )
    

    La select funziona correttamente e genera esattamente il numero di record già presenti nella tabella CDG_ESTRAZ_ORE.

    Il problema nasce nel momento in cui vado a fare l'update in quanto mi viene restituito l'errore:

    Msg 512, Level 16, State 1, Line 1
    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


























    Ultima modifica di IncorrectSintax; 19-05-2014 a 12:13
    IncorrectSyntax

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.