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