USE [datataker] GO /****** Object: Trigger [dbo].[Tr_BlokData_Ins] Script Date: 04/14/2014 17:10:18 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: -- Create date: -- Description: -- ============================================= CREATE TRIGGER [dbo].[Tr_BlokData_Ins] ON [dbo].[BlokData] FOR INSERT AS BEGIN -- Indien geen records, voer dan ook geen updates uit IF @@ROWCOUNT < 1 RETURN; -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for trigger here -- variabelen voor waarden welke net gelogd zijn DECLARE @pers int; DECLARE @datum_tijd datetime; DECLARE @hoogte float; DECLARE @gewicht float; DECLARE @temp float; DECLARE @anodeteller float; DECLARE @s3 bit; DECLARE @sgewicht float; DECLARE @lotnummer char(10); DECLARE @vormmachine char(3); DECLARE @sg_factor float; -- haal actuele waarden op, datataker logt slechts 1 record per keer -- uitgangspunt is dat meerdere records tegelijk gelogd kunnen worden SELECT @pers = pers, @s3 = 'TRUE', @datum_tijd = datum_tijd, @hoogte = ISNULL(hoogte,0), @gewicht = ISNULL(gewicht,0), @sgewicht = 0.0, @temp = ISNULL(temp,0), @anodeteller = ISNULL(anodeteller,0) FROM inserted; -- transactie met try/catch vanaf hier beginnen -- ophalen lotnumer uit flmassa.recept database, ophalen uit sql-server-1 -- bij mislukken wordt overgegaan naar sql-server-2 -- tijd van datataker vergelijken met huidige tijd, blok dient binnen huidige shift te vallen -- Tijdsafwijking toegestaan is 1 minuut. De shifts zijn als volgt ingedeeld; -- shift 1 7:00 - 15:00; shift 2 15:00 - 23:00; shift 3 23:00 - 7:00 -- in where clause tijd opnemen: where datum_tijd <= blok datum_tijd + 1 minuut. SELECT TOP (1) @lotnummer = [lotnummer], @vormmachine = [Vormmach] FROM [FL8-ONTWIKKEL\SQLMASSA].[flmassa].[dbo].[recept] WHERE [Systeem] = 3 ORDER BY FL_SECTIME DESC; -- als query geen resultaat heeft wordt lotnummer 'leeg' IF (@@ROWCOUNT < 1) SET @lotnummer=''; -- er is een lotnummer beschikbaar, controleer op juiste vorm machine -- converteer @pers nummer van integer naar string IF ((@@ROWCOUNT >= 1) AND (@vormmachine <> CONVERT( char(3), @pers))) SET @lotnummer=''; -- allen actie ondernemen indien er een lotnr is IF (@lotnummer <> '') BEGIN -- bepaal soortelijk gewicht, sg_factor is aanwezig in MPV tabel SELECT @sg_factor = [SG_FACT] FROM [FL8-ONTWIKKEL\SQLMASSA].[flmassa].[dbo].[MPV] WHERE [LOTNR] = @lotnummer; -- bereking sortelijk gewicht IF ((@@ROWCOUNT >= 1) and (@hoogte > 0)) SET @sgewicht = (@sg_factor * @gewicht) / @hoogte; END -- INSERT INTO [datataker].[dbo].[blokinfo] -- ([pers], [datum_tijd], [hoogte], [gewicht], [temp], [anodeteller]) -- VALUES (@pers, @datum_tijd, @hoogte, @gewicht, @temp, @anodeteller); -- copieer de waarden naar database pers2, tabel [KRM], server DATATAKER-5\MASSAEXPRESS -- INSERT INTO [DATATAKER-5\MASSAEXPRESS].[PERS2].[dbo].[KRM] ([gewicht], [hoogte], [sgewicht], [temp]) INSERT INTO [DATATAKER-5\MASSAEXPRESS].[PERS2].[dbo].[KRM] ([datum_tijd], [lotnr], [machinenr], [s3], [volgnummer], [gewicht], [hoogte], [sgewicht], [temp]) VALUES (@datum_tijd, @lotnummer, @vormmachine, @s3, @anodeteller, @gewicht, @hoogte, @sgewicht, @temp); --Declare CurMPV Cursor For -- selectie van records uit massa-MPV -- Select SYSTEEM -- met identiek lotnummer als vormerij-KRM -- From [flmassa].dbo.MPV -- Where LOTNR=@My_LotNummer; --Select @My_Sectime = inserted.[SecTime] -- om aktuele record in KRM te bepalen die moet worden -- From inserted; -- geupdated met Systeem informatie --Select @My_R1 = S040_1_RB, -- om te bepalen of massa-systeem met identiek lotnumer -- @My_R2 = S040_2_RB, -- als vormerij wel draait -- @My_R3 = S040_3_RB -- From [flmassa].dbo.R_Alg --Open CurMPV; --Fetch Next -- From CurMPV -- InTo @My_Systeem; END