aNCORA UPDATE db

This commit is contained in:
Samuele E. Locatelli
2018-11-17 16:40:07 +01:00
parent 5dc8c957c3
commit b2c186ab9b
3 changed files with 132 additions and 0 deletions
+132
View File
@@ -0,0 +1,132 @@
/*************************************************************
-- AGGIUNTA FUNZIONI
**************************************************************/
/****** Object: UserDefinedFunction [dbo].[f_padLeft] Script Date: 17/11/2018 16:12:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/***************************************
* FUNCTION f_padLeft
*
* fornisce una stringa della lunghezza desiderata aggiungendo a sx il carattere richiesto alla @string originale
*
* Steamware, S.E.L.
* mod: 2010.03.19
*
****************************************/
CREATE FUNCTION [dbo].[f_padLeft] (@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1))
RETURNS VARCHAR(255) AS
BEGIN
-- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character
RETURN CASE
WHEN LEN(@string) < @desired_length
THEN REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character) + @string
ELSE @string
END
END
GO
-- =============================================
-- Author: S.E.Locatelli
-- Create date: 2018.10.15
-- Description: Verifica stringa Allarmi attivi (delta)
-- e processa di conseguenza registrando history
-- =============================================
ALTER PROCEDURE [dbo].[stp_Allarmi_checkStatus]
(
@charSep CHAR(1) -- separatore elenco, default è ","
,@alarmList NVARCHAR(MAX) -- elenco allarmi attivi con separatore indicato
)
AS
BEGIN
BEGIN tran
SET NOCOUNT ON;
DECLARE @adesso DATETIME = GETDATE()
-- splitta elenco allarmi da stringa + separatore e salva in temp table...
SELECT *
INTO #CurrAlarm
FROM
(
SELECT * FROM dbo.SplitStrings(@alarmList,@charSep)
---- vers sql2016
--SELECT value FROM STRING_SPLIT(@alarmList, @charSep)
) as tblStatus
--SELECT * from #CurrAlarm
-- effettua check tra allarmi attivi e nuova lista, --> registro allarmi cessati
SELECT *
INTO #NewAlarms
FROM
(
-- allarmi padded a 8 char
SELECT *, 'NEW' as stato
FROM AnagAllarmi AAl
--INNER JOIN #CurrAlarm CAl ON AAl.CodAllarme = CAl.value
INNER JOIN #CurrAlarm CAl ON dbo.f_padLeft(AAl.CodAllarme, 9, '0') = dbo.f_padLeft(CAl.Item, 9, '0')
WHERE AAl.ReportAttivo = 1
AND AAl.CurrStatus = 0
) as tblNewAarms
-- effettua check tra allarmi attivi e nuova lista, --> registro allarmi NUOVI
SELECT *
INTO #CeasedAlarms
FROM
(
SELECT *, 'CEASED' as stato
FROM AnagAllarmi AAl
--LEFT OUTER JOIN #CurrAlarm CAl ON AAl.CodAllarme = CAl.value
LEFT OUTER JOIN #CurrAlarm CAl ON dbo.f_padLeft(AAl.CodAllarme, 9, '0') = dbo.f_padLeft(CAl.Item, 9, '0')
WHERE AAl.ReportAttivo = 1
AND AAl.CurrStatus = 1
--AND CAl.value IS NULL
AND CAl.Item IS NULL
) as tblCeasedAlarms
----------------------------------
-- processo allarmi NUOVI
----------------------------------
-- ora aggiorno in anagrafica
UPDATE AnagAllarmi
SET CurrStatus = 1
,LastStart = @adesso
from AnagAllarmi AAl
INNER JOIN #NewAlarms nAl ON dbo.f_padLeft(AAl.CodAllarme, 9, '0') = dbo.f_padLeft(nAl.CodAllarme, 9, '0')
-- riporto in history...
INSERT INTO StoricoAllarmi(DtEvento, CodAllarme, Attivo)
SELECT @adesso, CodAllarme, 1
FROM #NewAlarms
----------------------------------
-- processo allarmi CESSATI
----------------------------------
-- ora aggiorno in anagrafica
UPDATE AnagAllarmi
SET CurrStatus = 0
,LastEnd = @adesso
from AnagAllarmi AAl
INNER JOIN #CeasedAlarms nAl ON dbo.f_padLeft(AAl.CodAllarme, 9, '0') = dbo.f_padLeft(nAl.CodAllarme, 9, '0')
-- riporto in history...
INSERT INTO StoricoAllarmi(DtEvento, CodAllarme, Attivo)
SELECT @adesso, CodAllarme, 0
FROM #CeasedAlarms
COMMIT tran
END
-- UPDATE
update AnagAllarmi set CodAllarme = dbo.f_padLeft(CodAllarme, 9, '0')
select * from AnagAllarmi