set xact_abort on go begin transaction go set ANSI_NULLS on go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-13 -- Description: trigger x inserimento valori in archivio storico alla cancellazione/modifica del dato -- ============================================= create TRIGGER trg_storico ON PosizioneUdcCorrente AFTER DELETE,UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO INSERT INTO PosizioneUdcStorico(UDC, IdxCella, CodCS, DataInizio, DataFine) ( SELECT UDC, IdxCella, CodCS, DataRif as DataInizio, GETDATE() as DataFine FROM deleted ) END go commit go -- set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_spostaUdc * * sposta un UDC, salvandone la posizione precedente (se esiste) nella tab storica * * Steamware, S.E.L. * mod: 2010.06.11 * ****************************************/ alter PROCEDURE stp_spostaUdc ( @CodCS VARCHAR(2), @UDC VARCHAR(50), @IdxCellaTo INT ) AS BEGIN TRAN /* -- inizio mettendo in storico la posizione attuale dell'UDC (SE esiste) INSERT INTO PosizioneUdcStorico(UDC, IdxCella, CodCS, DataInizio, DataFine) ( SELECT UDC, IdxCella, CodCS, DataRif as DataInizio, GETDATE() as DataFine FROM PosizioneUdcCorrente WHERE UDC = @UDC ) */ -- libero la posizione attuale dell'UDC (se c'è...) DELETE FROM PosizioneUdcCorrente WHERE UDC = @UDC-- AND IdxCella = @IdxCellaFrom -- creo una nuova posizione per l'UDC INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif) VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE()) COMMIT TRAN RETURN go commit go -- set xact_abort on go begin transaction go set ANSI_NULLS on go /*************************************** * STORED stp_UDC_delibera * * fa la delibera dell'UDC andando a processare la state machien e quindi eventualmente cambiando la sua posizione * * Steamware, S.E.L. * mod: 2010.09.13 * ************************************/ alter PROCEDURE stp_UDC_delibera ( @CodTipoDelibera NVARCHAR(50), @UDC NVARCHAR(50), @CodSoggetto NVARCHAR(17), @CodCS VARCHAR(2) ) AS BEGIN TRAN DECLARE @IdxPosizioneTo AS INT DECLARE @IdxCellaTo AS INT -- registro delibera INSERT INTO DELIBERE VALUES (@CodTipoDelibera, @UDC, GETDATE(), @CodSoggetto) -- ricavo nuova posizione SET @IdxPosizioneTo = (SELECT tt.IdxPosizioneTo FROM TabTranPosizEventi tt INNER JOIN AnagTipoDelibere atd ON tt.CodEvento = atd.CodEvento WHERE (atd.CodTipoDelibera = @CodTipoDelibera)) -- calcolo la prima cella della nuova posizione... SET @IdxCellaTo = ( SELECT TOP 1 IdxCella FROM Celle WHERE IdxBlocco = ( SELECT IdxBlocco FROM Blocchi WHERE CodMag=CAST(@IdxPosizioneTo AS VARCHAR(50))) ) -- faccio update posizione UPDATE ElencoCartellini SET IdxPosizione = @IdxPosizioneTo WHERE UDC = @UDC -- ora cambio anche la posizione corrente dell'UDC (e tramite trigger storicizza...) EXEC stp_spostaUdc @CodCS, @UDC, @IdxCellaTo COMMIT TRAN RETURN go commit go