eDosStation/eDosLocal/SqlUpdates/update_005.sql
2026-10-22 16:13:39 +02:00

80 lines
No EOL
4 KiB
Transact-SQL

DECLARE @TargetVersionNumber INT=4, @VersionNumber INT;
IF OBJECT_ID('dbo.[DatabaseVersion]') IS NULL BEGIN
CREATE TABLE [dbo].[DatabaseVersion] ([VersionNumber] INT NOT NULL,
[VersionDate] DATETIME NOT NULL,
[Description] NVARCHAR(200) NULL);
INSERT INTO [dbo].[DatabaseVersion]([VersionNumber], [VersionDate], [Description])
VALUES(1, GETDATE(), 'Initial version');
SET @VersionNumber=1;
END;
ELSE BEGIN
SELECT @VersionNumber=ISNULL(MAX([VersionNumber]), 0)
FROM [dbo].[DatabaseVersion];
END;
-- If version target is not met, disable execution for all subsequent batches
IF @VersionNumber<>@TargetVersionNumber BEGIN
PRINT 'Target version condition not met (Version is not '+CAST(@TargetVersionNumber AS VARCHAR(10))+'). Canceling rest of script.';
SET NOEXEC ON;
END;
GO
IF NOT EXISTS (SELECT 1
FROM [sys].[columns]
WHERE [object_id]=OBJECT_ID('[dbo].[EPDDevice]')AND [name]='HardWare')
ALTER TABLE [dbo].[EPDDevice] ADD [HardWare] VARCHAR(50);
GO
IF NOT EXISTS (SELECT 1
FROM [sys].[columns]
WHERE [object_id]=OBJECT_ID('[dbo].[EPDDeviceLog]')AND [name]='DllVersion')
ALTER TABLE [dbo].[EPDDeviceLog] ADD [DllVersion] VARCHAR(50);
GO
UPDATE [dbo].[EPDDevice] SET [synced]=0 WHERE [synced] IS NULL;
GO
CREATE OR ALTER PROCEDURE [dbo].[EPDAddLog] @EPDID INT, @FirmWare VARCHAR(50), @BatNoload_mV INT=0, @Batload_mV INT=0, @CPU_mV INT=0, @ID_Station INT, @ID_Visit INT, @epdType TINYINT, @r_InvalidState INT=0, @r_OperationTimeout INT=0, @r_InsufficientPriv INT=0, @r_OperationFailed INT=0, @r_OtherError INT=0, @WriteTime INT=0, @Registered BIT=0, @HardWare VARCHAR(50)=null, @DllVersion VARCHAR(50)=null
AS BEGIN
DECLARE @now DATETIME=GETDATE();
IF NOT EXISTS (SELECT * FROM [dbo].[EPDDevice] WHERE [EPDID]=@EPDID)
INSERT [dbo].[EPDDevice]([EPDID], [FirmWare], [First_Station], [firstseen], [Last_Station], [lastseen], [epdType], [synced], [HardWare])
VALUES(@EPDID, @FirmWare, @ID_Station, @now, @ID_Station, @now, @epdType, 0, @HardWare);
ELSE
UPDATE [dbo].[EPDDevice]
SET [Last_Station]=@ID_Station, [lastseen]=@now, [synced]=0, [HardWare]=@HardWare
WHERE [EPDID]=@EPDID;
INSERT [dbo].[EPDDeviceLog]([EPDID], [ID_Station], [ID_Visit], [updated], [BatNoload_mV], [Batload_mV], [CPU_mV], [r_InvalidState], [r_OperationTimeout], [r_InsufficientPriv], [r_OperationFailed], [r_OtherError], [WriteTime], [Registered] , [DllVersion])
VALUES(@EPDID, -- EPDID - int
@ID_Station, -- ID_Station - int
@ID_Visit, -- ID_Visit - int
@now, -- updated - datetime
@BatNoload_mV, @Batload_mV, @CPU_mV, @r_InvalidState, @r_OperationTimeout, @r_InsufficientPriv, @r_OperationFailed, @r_OtherError, @WriteTime, @Registered, @DllVersion);
END;
GO
CREATE OR ALTER PROCEDURE [EPDDeviceToSync]
AS
SELECT [EPDID], [FirmWare], [First_Station], [firstseen], [Last_Station]=ISNULL([Last_Station], [First_Station]), [lastseen]=ISNULL([lastseen], [firstseen]), [epdType]=ISNULL([epdType], 0), [synced]=ISNULL([synced], 0), [HardWare]
FROM [dbo].[EPDDevice]
WHERE([synced]=0 OR [synced] IS NULL);
GO
GRANT EXECUTE ON [EPDDeviceToSync] TO [eDosStation];
GO
CREATE OR ALTER PROCEDURE [EPDDeviceSetSynced] @EPDID INT
AS
UPDATE [dbo].[EPDDevice] SET [synced]=1 WHERE [EPDID]=@EPDID;
GO
GRANT EXECUTE ON [EPDDeviceSetSynced] TO [eDosStation];
GO
CREATE OR ALTER PROCEDURE [EPDDeviceLogToSync] @ID_STATION INT, @MaxVisit INT
AS
SELECT [EPDID], [ID_Station], [ID_Visit], [updated], [BatNoload_mV], [Batload_mV], [CPU_mV], [r_InvalidState], [r_OperationTimeout], [r_InsufficientPriv], [r_OperationFailed], [r_OtherError], [Registered], [WriteTime], [DllVersion]
FROM [dbo].[EPDDeviceLog]
WHERE([ID_Station]=@ID_STATION)AND([ID_Visit]>@MaxVisit)
ORDER BY [ID_Visit];
GO
GRANT EXECUTE ON [EPDDeviceLogToSync] TO [eDosStation];
GO
INSERT INTO [dbo].[DatabaseVersion]([VersionNumber], [VersionDate], [Description])
VALUES(5, GETDATE(), 'Device sync');
GO
-- Final Batch: Turn execution back ON for subsequent scripts in the same session
SET NOEXEC OFF;
GO