Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072

    [SQL Server] Trigger e condizione su un campo

    Ciao a tutti, ho un trigger associato ad una tabella che dovrebbe aggiornare a cascata una tabella collegata.

    Nel dettaglio (dalla griglia della web app) viene checkato un flag, automaticamente viene scatenato il trigger che applica il check alla tabella collegata


    Codice PHP:
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER trigger 
    [dbo].[TR_Update]
    on [dbo].[Corsi]
    after update
    as

    /*

    Se il è attivo, viene attivato per tutti i dipendenti 
    Se il è disattivo, viene disattivato per tutti i dipendenti

    */

    begin
    DECLARE @IDCorso int,        
            @
    Attivo  bit
     
            select 
    @IDCorso=ID,    
            @
    Attivo Attivo from inserted
     
    if @Attivo 1
    begin
     begin transaction
    ;

        
    update DipendentiCorsi
        set Attivo 
    1
        where IDCorso
    =@IDCorso;    
        
        
    COMMIT TRANSACTION;
    end

    if @Attivo 0
    begin
      begin transaction
    ;

        
    update DipendentiCorsi
        set Attivo 
    0
        where IDCorso
    =@IDCorso;    
        
        
    COMMIT TRANSACTION;
    end
    end


    Funziona, ovvero se cambio il valore del flag, si aggiorna.

    Il problema è che quando vado in edit del record Corsi e modifico altri valori (e salvo), viene (ovviamente) automaticamente lanciato il trigger apportando modifiche ai flag della tabella collegata (azione non richiesta).

    Come posso fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Praticamente il problema è che basta fare una modifica al record (in edit del record), per automaticamente applicare lo stato attuale del flag Attivo a tutti i record della tabella collegata.

    Io invece in fase di modifica del record vorrei lasciare invariato lo stato delle tabelle collegate per quel campo (non gestire il processo di aggiornamento a catena). Ma applicarlo solo per specifica richiesta tramite modifica del flag nella griglia (quindi non in edit mode)

    In sintesi ho:
    - griglia con elenco corsi (con possibilità di impostare il checkbox del campo attivo, per ogni riga)
    - dettaglio corso, dove non voglio andare ad agire sull'aggiornamento delle tabelle collegata


    Qualche idea?


    Grazie

  3. #3
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Se ho capito bene quello che vuoi fare...
    Nei trigger di SQL Server esistono due tabelle "virtuali" che puoi utilizzare, la Inserted (già lo fai) che ti dà il nuovo valore inserito e la Deleted che ti dice quale era il valore prima della modifica

    Potresti quindi andare a ripescarli entrambi (ed avere qualcosa del tipo @Attivo_New e @Attivo_Old) e lanciare la tua operazione di aggiornamento delle tabella collegata solo nel caso in cui il valore di @Attivo_New non solo sia uguale a 1 o a 0 ma sia anche diverso da @Attivo_Old (metti all'inizio di tutto qualcosa del tipo "if @Arrivo_New <> @Attivo_Old...")

    Vedi ad esempio: http://stackoverflow.com/questions/3...at-was-updated

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Grazie
    Sembra essere l'approccio giusto!
    però come mi comporterei quando dalla griglia l'utente abilita/disabilita il flag? la condizione non sarebbe mai soddisfatta .... e non è corretto.

    Credo che il problema stia nel fatto che dovrei dovrei chiamare il trigger solo quando modifico il checkbox dalla griglia e non in edit mode del record

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.