Serverumzug
This commit is contained in:
245
current/[DD_ECM]-Database/ReC/[PRREC_DELETE_OBJECT].sql
Normal file
245
current/[DD_ECM]-Database/ReC/[PRREC_DELETE_OBJECT].sql
Normal file
@@ -0,0 +1,245 @@
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
-- [PRREC_DELETE_OBJECT]
|
||||
-- =================================================================
|
||||
-- Deletes one or more data in a given Entity
|
||||
--
|
||||
-- Returns: INT Value - 0 = Everything worked well
|
||||
-- =================================================================
|
||||
-- Copyright (c) 2025 by Digital Data GmbH
|
||||
--
|
||||
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
|
||||
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
|
||||
-- =================================================================
|
||||
-- Creation Date / Author: 22.12.2025 / MK
|
||||
-- Version Date / Editor: 22.12.2025 / MK
|
||||
-- Version Number: 1.0.0.0
|
||||
-- =================================================================
|
||||
-- History:
|
||||
-- 22.12.2025 / MK - First Version
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[PRREC_DELETE_OBJECT] (
|
||||
@pENTITY NVARCHAR(25) = 'RESULT', -- Target entity: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT
|
||||
@pSTART NVARCHAR(25) = '0', -- Start GUID/ID (inclusive), numeric text
|
||||
@pEND NVARCHAR(25) = '0', -- End GUID/ID (inclusive), numeric text
|
||||
@pFORCE BIT = 0 -- 1 = delete even if dependent data exists
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
-- declare new vars because of parameter sniffing
|
||||
DECLARE @ENTITY NVARCHAR(25) = UPPER(LTRIM(RTRIM(ISNULL(@pENTITY, 'RESULT')))),
|
||||
@START_VAL NVARCHAR(25) = LTRIM(RTRIM(ISNULL(@pSTART, '0'))),
|
||||
@END_VAL NVARCHAR(25) = LTRIM(RTRIM(ISNULL(@pEND, '0'))),
|
||||
@FORCE BIT = ISNULL(@pFORCE, 0);
|
||||
|
||||
-- declare runtime vars
|
||||
DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID);
|
||||
DECLARE @START_ID BIGINT = TRY_CAST(@START_VAL AS BIGINT),
|
||||
@END_ID BIGINT = TRY_CAST(@END_VAL AS BIGINT),
|
||||
@END_ID_TMP BIGINT = 0,
|
||||
@RETURN_STATUS INT = 0,
|
||||
@RETURN_STATUS_TEXT NVARCHAR(MAX) = 'START PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
|
||||
----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--=================================================-- Output parameters --================================================--
|
||||
PRINT '====================================================================================================';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
PRINT '';
|
||||
PRINT 'PARAMETER01 - @ENTITY: ' + ISNULL(CONVERT(NVARCHAR(25), @ENTITY), 'NULL');
|
||||
PRINT 'PARAMETER02 - @START: ' + ISNULL(CONVERT(NVARCHAR(25), @START_VAL), 'NULL');
|
||||
PRINT 'PARAMETER03 - @END: ' + ISNULL(CONVERT(NVARCHAR(25), @END_VAL), 'NULL');
|
||||
PRINT 'PARAMETER04 - @FORCE: ' + ISNULL(CONVERT(NVARCHAR(1), @FORCE), 'NULL');
|
||||
PRINT '';
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--================================================-- Validation --=======================================================--
|
||||
IF (@ENTITY NOT IN ('ACTION', 'ENDPOINT', 'ENDPOINT_AUTH', 'ENDPOINT_PARAMS', 'PROFILE', 'RESULT')) BEGIN
|
||||
SET @RETURN_STATUS = 50301;
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: Unknown entity "' + @ENTITY + '". Allowed: ACTION, ENDPOINT, ENDPOINT_AUTH, ENDPOINT_PARAMS, PROFILE, RESULT.';
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
RETURN @RETURN_STATUS;
|
||||
END;
|
||||
|
||||
IF (@START_ID IS NULL OR @END_ID IS NULL) BEGIN
|
||||
SET @RETURN_STATUS = 50302;
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: @START and @END must be convertible to BIGINT.';
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
RETURN @RETURN_STATUS;
|
||||
END;
|
||||
|
||||
-- normalize range
|
||||
IF (@END_ID = 0) BEGIN
|
||||
SET @END_ID = @START_ID;
|
||||
END;
|
||||
|
||||
IF (@START_ID = 0) BEGIN
|
||||
SET @START_ID = @END_ID;
|
||||
END;
|
||||
|
||||
IF (@START_ID > @END_ID) BEGIN
|
||||
SET @END_ID_TMP = @START_ID;
|
||||
SET @START_ID = @END_ID;
|
||||
SET @END_ID = @END_ID_TMP;
|
||||
END;
|
||||
|
||||
PRINT 'INFO: Normalized deletion range from ' + CONVERT(NVARCHAR(25), @START_ID) + ' to ' + CONVERT(NVARCHAR(25), @END_ID);
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
--===============================================-- Main Processing --===================================================--
|
||||
BEGIN TRY
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
-- Delete selected entities respecting dependencies
|
||||
IF (@ENTITY = 'ACTION' AND @RETURN_STATUS = 0) BEGIN
|
||||
PRINT 'INFO: Deleting ACTION records...';
|
||||
|
||||
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
|
||||
SET @RETURN_STATUS = 50303;
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: Dependent results exist for ACTION. Set @pFORCE=1 to delete anyway.';
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
RETURN @RETURN_STATUS;
|
||||
END; ELSE BEGIN
|
||||
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] BETWEEN @START_ID AND @END_ID;
|
||||
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
|
||||
SET @RETURN_STATUS_TEXT = 'INFO: ACTION and related RESULT records deleted.';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
END;
|
||||
END;
|
||||
ELSE IF (@ENTITY = 'ENDPOINT' AND @RETURN_STATUS = 0) BEGIN
|
||||
PRINT 'INFO: Deleting ENDPOINT records...';
|
||||
|
||||
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
|
||||
SET @RETURN_STATUS = 50304;
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT is used by ACTION. Set @pFORCE=1 to delete anyway.';
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
RETURN @RETURN_STATUS;
|
||||
END; ELSE BEGIN
|
||||
DECLARE @ActionIdsForEndpoint TABLE (GUID BIGINT PRIMARY KEY);
|
||||
INSERT INTO @ActionIdsForEndpoint(GUID)
|
||||
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_ID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForEndpoint);
|
||||
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForEndpoint);
|
||||
DELETE FROM [dbo].[TBREC_CFG_ENDPOINT] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
SET @RETURN_STATUS_TEXT = 'INFO: ENDPOINT, related ACTION and RESULT records deleted.';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
END;
|
||||
END;
|
||||
ELSE IF (@ENTITY = 'ENDPOINT_AUTH' AND @RETURN_STATUS = 0) BEGIN
|
||||
PRINT 'INFO: Deleting ENDPOINT_AUTH records...';
|
||||
|
||||
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_AUTH_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
|
||||
SET @RETURN_STATUS = 50305;
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_AUTH is used by ACTION. Set @pFORCE=1 to delete anyway.';
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
RETURN @RETURN_STATUS;
|
||||
END; ELSE BEGIN
|
||||
DECLARE @ActionIdsForAuth TABLE (GUID BIGINT PRIMARY KEY);
|
||||
INSERT INTO @ActionIdsForAuth(GUID)
|
||||
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_AUTH_ID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForAuth);
|
||||
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForAuth);
|
||||
DELETE FROM [dbo].[TBREC_CFG_ENDPOINT_AUTH] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
SET @RETURN_STATUS_TEXT = 'INFO: ENDPOINT_AUTH, related ACTION and RESULT records deleted.';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
END;
|
||||
END;
|
||||
ELSE IF (@ENTITY = 'ENDPOINT_PARAMS' AND @RETURN_STATUS = 0) BEGIN
|
||||
PRINT 'INFO: Deleting ENDPOINT_PARAMS records...';
|
||||
|
||||
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_PARAMS_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
|
||||
SET @RETURN_STATUS = 50306;
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: ENDPOINT_PARAMS is used by ACTION. Set @pFORCE=1 to delete anyway.';
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
RETURN @RETURN_STATUS;
|
||||
END; ELSE BEGIN
|
||||
DECLARE @ActionIdsForParams TABLE (GUID BIGINT PRIMARY KEY);
|
||||
INSERT INTO @ActionIdsForParams(GUID)
|
||||
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [ENDPOINT_PARAMS_ID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForParams);
|
||||
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForParams);
|
||||
DELETE FROM [dbo].[TBREC_CFG_ENDPOINT_PARAMS] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
SET @RETURN_STATUS_TEXT = 'INFO: ENDPOINT_PARAMS, related ACTION and RESULT records deleted.';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
END;
|
||||
END;
|
||||
ELSE IF (@ENTITY = 'PROFILE' AND @RETURN_STATUS = 0) BEGIN
|
||||
PRINT 'INFO: Deleting PROFILE records...';
|
||||
|
||||
IF (@FORCE = 0 AND EXISTS (SELECT 1 FROM [dbo].[TBREC_CFG_ACTION] WHERE [PROFILE_ID] BETWEEN @START_ID AND @END_ID)) BEGIN
|
||||
SET @RETURN_STATUS = 50307;
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: PROFILE is used by ACTION. Set @pFORCE=1 to delete anyway.';
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
RETURN @RETURN_STATUS;
|
||||
END; ELSE BEGIN
|
||||
DECLARE @ActionIdsForProfile TABLE (GUID BIGINT PRIMARY KEY);
|
||||
INSERT INTO @ActionIdsForProfile(GUID)
|
||||
SELECT [GUID] FROM [dbo].[TBREC_CFG_ACTION] WHERE [PROFILE_ID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [ACTION_ID] IN (SELECT GUID FROM @ActionIdsForProfile);
|
||||
DELETE FROM [dbo].[TBREC_CFG_ACTION] WHERE [GUID] IN (SELECT GUID FROM @ActionIdsForProfile);
|
||||
DELETE FROM [dbo].[TBREC_RUN_PROFILE] WHERE [PROFILE_ID] BETWEEN @START_ID AND @END_ID;
|
||||
DELETE FROM [dbo].[TBREC_CFG_PROFILE] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
|
||||
|
||||
SET @RETURN_STATUS_TEXT = 'INFO: PROFILE, related ACTION, RESULT and RUN records deleted.';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
END;
|
||||
END;
|
||||
ELSE IF (@ENTITY = 'RESULT' AND @RETURN_STATUS = 0) BEGIN
|
||||
PRINT 'INFO: Deleting RESULT records...';
|
||||
DELETE FROM [dbo].[TBREC_OUT_RESULT] WHERE [GUID] BETWEEN @START_ID AND @END_ID;
|
||||
SET @RETURN_STATUS_TEXT = 'INFO: RESULT records deleted.';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
END;
|
||||
|
||||
IF (@RETURN_STATUS > 0) BEGIN
|
||||
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
|
||||
END; ELSE BEGIN
|
||||
COMMIT TRANSACTION;
|
||||
END;
|
||||
|
||||
--======================================================-- Output result --======================================================--
|
||||
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
|
||||
|
||||
PRINT '';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
PRINT '====================================================================================================';
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
RETURN @RETURN_STATUS;
|
||||
|
||||
END TRY BEGIN CATCH
|
||||
|
||||
IF (XACT_STATE() <> 0) ROLLBACK TRANSACTION;
|
||||
|
||||
--======================================================-- Output result --======================================================--
|
||||
SET @RETURN_STATUS_TEXT = 'ERROR: ' + ERROR_MESSAGE();
|
||||
RAISERROR(@RETURN_STATUS_TEXT,16,1);
|
||||
|
||||
SET @RETURN_STATUS_TEXT = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(VARCHAR(50), GETDATE(), 120);
|
||||
|
||||
PRINT '';
|
||||
PRINT @RETURN_STATUS_TEXT;
|
||||
PRINT '====================================================================================================';
|
||||
-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
RETURN @RETURN_STATUS;
|
||||
|
||||
END CATCH;
|
||||
-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
END;
|
||||
GO
|
||||
Reference in New Issue
Block a user