set xact_abort on go begin transaction go drop table TempiCicloRilevati go create table TempiCicloRilevati( IdxMacchina nvarchar(50) not null, CodArticolo nvarchar(50) not null, DataOraRif datetime not null, TCMedio decimal(18,8) not null constraint DF_TempiCicloRilevati_TempoMedio default (1), PzProd int not null constraint DF_TempiCicloRilevati_PzProd default (1), constraint PK_TempiCicloRilevati primary key(IdxMacchina,CodArticolo,DataOraRif) ) go alter table TempiCicloRilevati add constraint FK_TempiCicloRilevati_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade go drop table TempiCicloTeorici go create table TempiCicloTeorici( IdxMacchina nvarchar(50) not null, CodArticolo nvarchar(50) not null, DataOraFrom datetime not null, DataOraTo datetime, TCAssegnato decimal(18,8) not null constraint DF_TempiCicloTeorici_TempoMedio default (1), constraint PK_TempiCicloTeorici primary key(IdxMacchina,CodArticolo,DataOraFrom) ) go alter table TempiCicloTeorici add constraint FK_TempiCicloTeorici_Macchine foreign key(IdxMacchina) references Macchine(IdxMacchina) on update cascade go commit go set xact_abort on go begin transaction go INSERT INTO dbo.AnagraficaEventi VALUES (20, N'Contapezzi') go commit transaction go set xact_abort on go begin transaction go alter table Kanban add CodArticolo nvarchar(50) go set ANSI_NULLS on go commit go set xact_abort on go begin transaction go alter table AnagraficaEventi add TabAzione nvarchar(50) constraint DF_AnagraficaEventi_TabAzione default (''), Azione nvarchar(50) constraint DF_AnagraficaEventi_Azione default ('') go update AnagraficaEventi set TabAzione='',Azione='' go set ANSI_NULLS on go create TRIGGER trg_doActions ON EventList FOR INSERT AS /* dichiarazione variabili */ DECLARE @IdxTipo INT DECLARE @TabAzione NVARCHAR(50) DECLARE @Azione NVARCHAR(50) DECLARE @IdxMacchina NVARCHAR(50) DECLARE @MatricolaKanban NVARCHAR(50) DECLARE @CodArticolo NVARCHAR(50) DECLARE @TCMedio DECIMAL(18,8) DECLARE @DataOra DATETIME DECLARE @DataOraPrec DATETIME /* recupero valori dell'INSERT */ SET @IdxTipo = ( SELECT i.IdxTipo FROM inserted i ) SET @IdxMacchina = ( SELECT i.IdxMacchina FROM inserted i ) /* recupero altri valori */ SET @TabAzione = ( SELECT ISNULL(TabAzione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo ) SET @Azione = ( SELECT ISNULL(Azione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo ) /* controllo se l'evento richieda azioni successive */ IF(@TabAzione <> '' AND @Azione <> '') BEGIN /* azioni richieste: seconda dei casi eseguo... */ IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Insert') BEGIN /* calcolo valori */ SET @DataOra = ( SELECT i.InizioStato FROM inserted i ) SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i ) SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanban ) /* calcolo tempo tra gli ultimi 2 eventi "contapezzi" */ SET @DataOraPrec = ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) ) /* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/ SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) ) /* inserisco riga di tempo ciclo */ INSERT INTO TempiCicloRilevati VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, 1) END END go commit go set xact_abort on go begin transaction go UPDATE dbo.AnagraficaEventi SET TabAzione=N'TempiCicloRilevati', Azione=N'Insert' WHERE IdxTipo=20 go commit transaction go set xact_abort on go begin transaction go set ANSI_NULLS on go alter TRIGGER trg_doActions ON EventList FOR INSERT AS /* dichiarazione variabili */ DECLARE @IdxTipo INT DECLARE @TabAzione NVARCHAR(50) DECLARE @Azione NVARCHAR(50) DECLARE @IdxMacchina NVARCHAR(50) DECLARE @MatricolaKanban NVARCHAR(50) DECLARE @CodArticolo NVARCHAR(50) DECLARE @TCMedio DECIMAL(18,8) DECLARE @DataOra DATETIME DECLARE @DataOraPrec DATETIME DECLARE @NumPz INT /* recupero valori dell'INSERT */ SET @IdxTipo = ( SELECT i.IdxTipo FROM inserted i ) SET @IdxMacchina = ( SELECT i.IdxMacchina FROM inserted i ) /* recupero altri valori */ SET @TabAzione = ( SELECT ISNULL(TabAzione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo ) SET @Azione = ( SELECT ISNULL(Azione,'') FROM AnagraficaEventi WHERE IdxTipo = @IdxTipo ) /* controllo se l'evento richieda azioni successive */ IF(@TabAzione <> '' AND @Azione <> '') BEGIN /* azioni richieste: seconda dei casi eseguo... */ IF(@TabAzione = 'TempiCicloRilevati' AND @Azione = 'Insert') BEGIN /* calcolo valori */ SET @DataOra = ( SELECT i.InizioStato FROM inserted i ) SET @MatricolaKanban = ( SELECT i.MatricolaKanban FROM inserted i ) SET @NumPz = ( SELECT CASE WHEN (ISNUMERIC(value)=1) THEN value ELSE 1 END FROM inserted i ) SET @CodArticolo = ( SELECT CodArticolo FROM Kanban WHERE MatricolaKanban = @MatricolaKanban ) /* calcolo tempo tra gli ultimi 2 eventi "contapezzi" */ SET @DataOraPrec = ( SELECT ISNULL((SELECT Top 1 InizioStato FROM EventList WHERE IdxMacchina = @IdxMacchina AND IdxTipo = @IdxTipo AND InizioStato < @DataOra ORDER BY InizioStato DESC), @DataOra ) ) /* è in millisecondi, divido per 60'000.00 x avere minuti centesimali*/ SET @TCMedio = ( SELECT (DATEDIFF(ms, @DataOraPrec, @DataOra) / 60000.00 ) ) /* inserisco riga di tempo ciclo */ INSERT INTO TempiCicloRilevati VALUES(@IdxMacchina, @CodArticolo, @DataOra, @TCMedio, @NumPz) END END go commit go set xact_abort on go begin transaction go set ANSI_NULLS on go /************************************* * STORED PROCEDURE stp_TC_getByMacchinaPeriodo * recupera tempi ciclo x machcian e periodo * * modif.: S.E.L. - 2010.12.15 **************************************/ create PROCEDURE stp_TC_getByMacchinaPeriodo ( @IdxMacchina NVARCHAR(50), @Inizio DATETIME, @Fine DATETIME ) AS SELECT * FROM TempiCicloRilevati WHERE IdxMacchina = @IdxMacchina AND (DataOraRif >= @Inizio) AND (DataOraRif <= @Fine) RETURN go commit go -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(25, GETDATE()) GO