Files
DP44/DataPRO_sql/dbo.sp_CompareGroupChannelSettings.StoredProcedure.sql
2026-04-17 14:55:32 -04:00

104 lines
2.4 KiB
Transact-SQL

USE [DataPRO]
GO
/****** Object: StoredProcedure [dbo].[sp_CompareGroupChannelSettings] Script Date: 1/29/2019 11:34:29 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_CompareGroupChannelSettings]
@GroupId1 INT,
@GroupId2 INT,
@Result BIT OUTPUT
AS
BEGIN
BEGIN TRY
DECLARE @tChannels1 table (
ChannelId BIGINT
,SensorId INT
,Processed BIT)
DECLARE @tChannels2 table (
ChannelId BIGINT
,SensorId INT
,Processed BIT)
INSERT INTO @tChannels1
SELECT Id
,SensorId
,0
FROM [dbo].[Channels] WHERE GroupId = @GroupId1 ORDER BY SensorId
INSERT INTO @tChannels2
SELECT Id
,SensorId
,0
FROM [dbo].[Channels] WHERE GroupId = @GroupId2 ORDER BY SensorId
IF ((SELECT COUNT(*) FROM @tChannels1) <> (SELECT COUNT(*) FROM @tChannels2))
BEGIN
SET @Result = 0
RETURN;
END
ELSE
BEGIN
IF ((SELECT COUNT(*) FROM @tChannels1) > 0) -- Both counts should be the same
BEGIN
WHILE ((SELECT COUNT(*) From @tChannels1 Where Processed = 0) > 0)
BEGIN
DECLARE @ChannelId1 BIGINT
DECLARE @ChannelId2 BIGINT
DECLARE @TotalCountChannel1 INT
DECLARE @TotalCountChannel2 INT
DECLARE @IdenticalCount INT
SELECT TOP 1
@ChannelId1 = ChannelId
FROM @tChannels1 WHERE Processed = 0
SELECT TOP 1
@ChannelId2 = ChannelId
FROM @tChannels2 WHERE Processed = 0
SET @TotalCountChannel1 = dbo.foo_GetTotalGroupChannelSettingsCount(@ChannelId1)
SET @TotalCountChannel2 = dbo.foo_GetTotalGroupChannelSettingsCount(@ChannelId2)
IF (@TotalCountChannel1 <> @TotalCountChannel2)
BEGIN
SET @Result = 0
RETURN
END
ELSE
BEGIN
IF (@TotalCountChannel1 > 0) -- Both total counts are the same
BEGIN
SET @IdenticalCount = [dbo].[foo_GetIdenticalGroupChannelSettingsCount](@ChannelId1, @ChannelId2)
IF (@IdenticalCount <> @TotalCountChannel1) -- Both total counts are the same
BEGIN
SET @Result = 0
RETURN
END
END
UPDATE @tChannels1 set [Processed] = 1 where ChannelId = @ChannelId1
UPDATE @tChannels2 set [Processed] = 1 where ChannelId = @ChannelId2
END
END
END
SET @Result = 1
END
END TRY
BEGIN CATCH
SET @Result = 0
END CATCH
END
GO