IF NOT EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = N'TransformMonitorDimProc')
BEGIN
EXECUTE ('CREATE PROCEDURE dbo.[TransformMonitorDimProc] @WaterMark xml AS RETURN 1')
END
GO
DECLARE @Statement NVARCHAR(MAX)
SET @Statement =
N'ALTER PROCEDURE [dbo].[TransformMonitorDimProc](@WaterMark XML)
AS BEGIN
SET NOCOUNT ON
DECLARE @utc DATETIME = GETUTCDATE()
DECLARE @errorNumber INT, @errorSeverity INT, @errorState INT, @errorLine INT, @errorProcedure NVARCHAR(256), @errorMessage NVARCHAR(MAX), @task NVARCHAR(512)
DECLARE @BatchId INT, @Updated INT = 0, @Inserted INT = 0, @retval INT = -1, @err INT = 0, @startTranCount INT = @@TRANCOUNT, @source1WM DATETIME, @source1MaxWM DATETIME
DECLARE @rowsToProcess INT = 0, @rejectedRowCount INT = 0, @canContinue BIT = 1, @loopCount INT
DECLARE @isReconciled BIT = 0
SELECT @task = ''Deleting extraneous changes - only retaining the most recent change to an entity''
DELETE source
FROM DWTemp.TransformMonitorDimProc_Source1 AS source
INNER JOIN DWTemp.TransformMonitorDimProc_Source1 latest ON
source.Id = latest.Id
AND (@isReconciled = 1 OR source.DatasourceId = latest.DatasourceId)
AND (source.LastModified < latest.LastModified
OR (source.LastModified = latest.LastModified AND source.Id < latest.Id)
)
BEGIN TRANSACTION
SELECT @task = ''Updating Dimension''
UPDATE dest SET
[ManagementPackId] = source.ManagementPackId,
[MonitorDefaultDescription] = CAST(source.[Description] AS NVARCHAR(256)),
[MonitorDefaultName] = source.[Name],
[MonitorSystemName] = source.[Name],
[IsDeleted] = source.[IsDeleted],
[UpdatedBatchId] = @BatchId
FROM DWTemp.TransformMonitorDimProc_Source1 source
INNER JOIN dbo.MonitorDimvw dest ON (source.DatasourceId = dest.SourceId AND source.Id = dest.MonitorGuid)
SELECT @Updated = @Updated + @@ROWCOUNT
SELECT @task = ''Inserting into Dimension''
INSERT INTO dbo.MonitorDimvw (
[SourceId],
[MonitorGuid],
[ManagementPackId],
[MonitorDefaultDescription],
[MonitorDefaultName],
[MonitorSystemName],
[IsDeleted],
[InsertedBatchId],
[UpdatedBatchId],
[BaseManagedEntityId]
)
SELECT DISTINCT
source.[DatasourceId],
source.[Id],
MIN(CAST(source.ManagementPackId AS NVARCHAR(256))),
MIN(CAST(source.[Description] AS NVARCHAR(256))),
MIN(source.[Name]),
MIN(source.[Name]),
MAX(CAST(ISNULL(source.[IsDeleted], 0) AS TINYINT)),
@BatchId,
0,
source.[Id]
FROM DWTemp.TransformMonitorDimProc_Source1 AS source
LEFT JOIN dbo.MonitorDimvw dest ON (source.DatasourceId = dest.SourceId AND source.Id = dest.MonitorGuid)
WHERE dest.BaseManagedEntityId IS NULL
GROUP BY source.[DatasourceId], source.[Id]