/* ============================================================================ FUNCTION_MODULE – PROZEDUREN Voraussetzung: Tabelle [_meta].[TBDD_CFG_FUNCTION_MODULE] existiert ============================================================================ */ USE [DD_IIM]; GO CREATE OR ALTER PROCEDURE [_meta].[PRDD_UPSERT_FUNCTION_MODULE] @PK_CFG_FUNCTION_MODULE_ID BIGINT = NULL, @ACTIVE BIT, @INTERNAL BIT, @FUNCTION_NAME NVARCHAR(50), @FUNCTION_TYPE NVARCHAR(10), @FUNCTION_DEFINITION NVARCHAR(MAX), @COMMENT NVARCHAR(500) = NULL, @VERSION SMALLINT = 1, @CREATED_WHO BIGINT, @CREATED_WHEN DATETIME2(0), @CHANGED_WHO BIGINT = NULL, @CHANGED_WHEN DATETIME2(0) = NULL, @OUT_PK_CFG_FUNCTION_MODULE_ID BIGINT OUTPUT AS BEGIN SET NOCOUNT ON; DECLARE @identity_insert_enabled BIT = 0; DECLARE @next_insert_id BIGINT; DECLARE @app_lock_result INT; BEGIN TRY SET CONTEXT_INFO 0x544244445F46554E4354494F4E5F4D4F44554C45; IF @PK_CFG_FUNCTION_MODULE_ID IS NOT NULL BEGIN UPDATE [_meta].[TBDD_CFG_FUNCTION_MODULE] SET [ACTIVE] = @ACTIVE, [INTERNAL] = @INTERNAL, [FUNCTION_NAME] = @FUNCTION_NAME, [FUNCTION_TYPE] = @FUNCTION_TYPE, [FUNCTION_DEFINITION] = @FUNCTION_DEFINITION, [COMMENT] = @COMMENT, [VERSION] = @VERSION, [CHANGED_WHO] = @CHANGED_WHO, [CHANGED_WHEN] = @CHANGED_WHEN WHERE [PK_CFG_FUNCTION_MODULE_ID] = @PK_CFG_FUNCTION_MODULE_ID; IF @@ROWCOUNT = 1 BEGIN SET @OUT_PK_CFG_FUNCTION_MODULE_ID = @PK_CFG_FUNCTION_MODULE_ID; END ELSE BEGIN IF @PK_CFG_FUNCTION_MODULE_ID < 100001 BEGIN THROW 52011, 'Explizite PK_CFG_FUNCTION_MODULE_ID muss >= 100001 sein.', 1; END; SET @identity_insert_enabled = 1; SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] ON; INSERT INTO [_meta].[TBDD_CFG_FUNCTION_MODULE] ( [PK_CFG_FUNCTION_MODULE_ID], [ACTIVE], [INTERNAL], [FUNCTION_NAME], [FUNCTION_TYPE], [FUNCTION_DEFINITION], [COMMENT], [VERSION], [CREATED_WHO], [CREATED_WHEN], [CHANGED_WHO], [CHANGED_WHEN] ) VALUES ( @PK_CFG_FUNCTION_MODULE_ID, @ACTIVE, 0, @FUNCTION_NAME, @FUNCTION_TYPE, @FUNCTION_DEFINITION, @COMMENT, @VERSION, @CREATED_WHO, @CREATED_WHEN, @CHANGED_WHO, @CHANGED_WHEN ); SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] OFF; SET @identity_insert_enabled = 0; SET @OUT_PK_CFG_FUNCTION_MODULE_ID = @PK_CFG_FUNCTION_MODULE_ID; END; END ELSE BEGIN EXEC @app_lock_result = sys.sp_getapplock @Resource = N'_meta.PRDD_UPSERT_FUNCTION_MODULE.IDENTITY_RANGE', @LockMode = N'Exclusive', @LockOwner = N'Session', @LockTimeout = 10000; IF @app_lock_result < 0 BEGIN THROW 52010, 'Konnte keine exklusive ID-Sperre für [_meta].[TBDD_CFG_FUNCTION_MODULE] erhalten.', 1; END; SELECT @next_insert_id = CASE WHEN MAX([PK_CFG_FUNCTION_MODULE_ID]) IS NULL OR MAX([PK_CFG_FUNCTION_MODULE_ID]) < 100000 THEN 100001 ELSE MAX([PK_CFG_FUNCTION_MODULE_ID]) + 1 END FROM [_meta].[TBDD_CFG_FUNCTION_MODULE]; SET @identity_insert_enabled = 1; SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] ON; INSERT INTO [_meta].[TBDD_CFG_FUNCTION_MODULE] ( [PK_CFG_FUNCTION_MODULE_ID], [ACTIVE], [INTERNAL], [FUNCTION_NAME], [FUNCTION_TYPE], [FUNCTION_DEFINITION], [COMMENT], [VERSION], [CREATED_WHO], [CREATED_WHEN], [CHANGED_WHO], [CHANGED_WHEN] ) VALUES ( @next_insert_id, @ACTIVE, 0, @FUNCTION_NAME, @FUNCTION_TYPE, @FUNCTION_DEFINITION, @COMMENT, @VERSION, @CREATED_WHO, @CREATED_WHEN, @CHANGED_WHO, @CHANGED_WHEN ); SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] OFF; SET @identity_insert_enabled = 0; EXEC sys.sp_releaseapplock @Resource = N'_meta.PRDD_UPSERT_FUNCTION_MODULE.IDENTITY_RANGE', @LockOwner = N'Session'; SET @OUT_PK_CFG_FUNCTION_MODULE_ID = @next_insert_id; END; SET CONTEXT_INFO 0x00; END TRY BEGIN CATCH IF @identity_insert_enabled = 1 BEGIN BEGIN TRY SET IDENTITY_INSERT [_meta].[TBDD_CFG_FUNCTION_MODULE] OFF; END TRY BEGIN CATCH END CATCH END; BEGIN TRY EXEC sys.sp_releaseapplock @Resource = N'_meta.PRDD_UPSERT_FUNCTION_MODULE.IDENTITY_RANGE', @LockOwner = N'Session'; END TRY BEGIN CATCH END CATCH SET CONTEXT_INFO 0x00; THROW; END CATCH END; GO CREATE OR ALTER PROCEDURE [_meta].[PRDD_DELETE_FUNCTION_MODULE] @PK_CFG_FUNCTION_MODULE_ID BIGINT AS BEGIN SET NOCOUNT ON; BEGIN TRY SET CONTEXT_INFO 0x544244445F46554E4354494F4E5F4D4F44554C45; DELETE FROM [_meta].[TBDD_CFG_FUNCTION_MODULE] WHERE [PK_CFG_FUNCTION_MODULE_ID] = @PK_CFG_FUNCTION_MODULE_ID; SET CONTEXT_INFO 0x00; END TRY BEGIN CATCH SET CONTEXT_INFO 0x00; THROW; END CATCH END; GO