8
0

Serverumzug

This commit is contained in:
2026-04-13 12:08:30 +02:00
parent 3096e432aa
commit 82609f5fc1
48 changed files with 5489 additions and 618 deletions

View File

@@ -0,0 +1,36 @@
/* ============================================================================
MASTER DEPLOY
Führt die getrennten Deploy-Skripte in korrekter Reihenfolge aus.
WICHTIG:
- Dieses Skript benötigt SQLCMD-Modus (SSMS/ADS).
- Ausführung im gleichen Verzeichnis wie die referenzierten Dateien.
============================================================================ */
:on error exit
PRINT 'Starte Deploy: Schema';
:r "[SCHEMA_META].sql"
PRINT 'Starte Deploy: Tabelle';
:r "[TBDD_CFG_SYSTEM_INFO].sql"
PRINT 'Starte Deploy: Prozeduren';
:r "[TBDD_CFG_SYSTEM_INFO_PROCEDURES].sql"
PRINT 'Starte Deploy: Trigger';
:r "[TBDD_CFG_SYSTEM_INFO_TRIGGER].sql"
PRINT 'Starte Deploy: Tabelle FUNCTION_MODULE';
:r "[TBDD_CFG_FUNCTION_MODULE].sql"
PRINT 'Starte Deploy: Prozeduren FUNCTION_MODULE';
:r "[TBDD_CFG_FUNCTION_MODULE_PROCEDURES].sql"
PRINT 'Starte Deploy: Trigger FUNCTION_MODULE';
:r "[TBDD_CFG_FUNCTION_MODULE_TRIGGER].sql"
PRINT 'Starte Deploy: Security Baseline';
:r "[SECURITY_META_CFG].sql"
PRINT 'Deploy abgeschlossen.';

View File

@@ -0,0 +1,12 @@
/* ============================================================================
META SCHEMA-SKRIPT
============================================================================ */
USE [DD_IIM];
GO
IF SCHEMA_ID(N'_meta') IS NULL
BEGIN
EXEC(N'CREATE SCHEMA [_meta] AUTHORIZATION [dbo];');
END;
GO

View File

@@ -0,0 +1,28 @@
/* ============================================================================
META SECURITY BASELINE
Ziel: Direkte DML auf Konfigurationstabellen unterbinden,
Zugriff über freigegebene Prozeduren steuern.
============================================================================ */
USE [DD_IIM];
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = N'RL_META_CFG_EXEC')
BEGIN
CREATE ROLE [RL_META_CFG_EXEC] AUTHORIZATION [dbo];
END;
GO
DENY INSERT, UPDATE, DELETE ON OBJECT::[_meta].[TBDD_CFG_SYSTEM_INFO] TO [public];
DENY INSERT, UPDATE, DELETE ON OBJECT::[_meta].[TBDD_CFG_FUNCTION_MODULE] TO [public];
GO
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_UPSERT_SYSTEM_INFO] TO [RL_META_CFG_EXEC];
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_DELETE_SYSTEM_INFO] TO [RL_META_CFG_EXEC];
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_UPSERT_FUNCTION_MODULE] TO [RL_META_CFG_EXEC];
GRANT EXECUTE ON OBJECT::[_meta].[PRDD_DELETE_FUNCTION_MODULE] TO [RL_META_CFG_EXEC];
GO
/* Mitgliedschaften projektspezifisch vergeben, z. B.:
ALTER ROLE [RL_META_CFG_EXEC] ADD MEMBER [<AppUserOderRole>];
*/

View File

@@ -0,0 +1,83 @@
USE [DD_IIM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U') IS NULL
BEGIN
CREATE TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
(
[PK_CFG_FUNCTION_MODULE_ID] [bigint] IDENTITY(1,1) NOT NULL,
[ACTIVE] [bit] NOT NULL,
[INTERNAL] [bit] NOT NULL,
[FUNCTION_NAME] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL,
[FUNCTION_TYPE] [nvarchar](10) COLLATE Latin1_General_CI_AS NOT NULL,
[FUNCTION_DEFINITION] [nvarchar](max) COLLATE Latin1_General_CI_AS NOT NULL,
[COMMENT] [nvarchar](500) COLLATE Latin1_General_CI_AS NULL,
[VERSION] [smallint] NOT NULL,
[CREATED_WHO] [bigint] NOT NULL,
[CREATED_WHEN] [datetime2](0) NOT NULL,
[CHANGED_WHO] [bigint] NULL,
[CHANGED_WHEN] [datetime2](0) NULL,
CONSTRAINT [TBDD_CFG_FUNCTION_MODULE_primaryKey] PRIMARY KEY NONCLUSTERED HASH
(
[PK_CFG_FUNCTION_MODULE_ID]
)WITH ( BUCKET_COUNT = 65536)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA );
END;
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c
ON c.object_id = dc.parent_object_id
AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U')
AND c.name = N'ACTIVE'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
ADD CONSTRAINT [DF_TBDD_CFG_FUNCTION_MODULE_ACTIVE] DEFAULT ((1)) FOR [ACTIVE];
END;
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c
ON c.object_id = dc.parent_object_id
AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U')
AND c.name = N'INTERNAL'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
ADD CONSTRAINT [DF_TBDD_CFG_FUNCTION_MODULE_INTERNAL] DEFAULT ((0)) FOR [INTERNAL];
END;
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c
ON c.object_id = dc.parent_object_id
AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'_meta.TBDD_CFG_FUNCTION_MODULE', N'U')
AND c.name = N'VERSION'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_FUNCTION_MODULE]
ADD CONSTRAINT [DF_TBDD_CFG_FUNCTION_MODULE_VERSION] DEFAULT ((1)) FOR [VERSION];
END;
GO

View File

@@ -0,0 +1,207 @@
/* ============================================================================
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

View File

@@ -0,0 +1,58 @@
/* ============================================================================
FUNCTION_MODULE TRIGGER
Voraussetzung: Tabelle [_meta].[TBDD_CFG_FUNCTION_MODULE] und Prozeduren existieren
============================================================================ */
USE [DD_IIM];
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_FUNCTION_MODULE_IO_INS]
ON [_meta].[TBDD_CFG_FUNCTION_MODULE]
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AFTER INSERT
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english'
)
IF CONTEXT_INFO() IS NULL OR CONTEXT_INFO() <> 0x544244445F46554E4354494F4E5F4D4F44554C45
BEGIN
THROW 51101, 'Direktes INSERT auf [_meta].[TBDD_CFG_FUNCTION_MODULE] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_FUNCTION_MODULE] verwenden.', 1;
END;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_FUNCTION_MODULE_IO_UPD]
ON [_meta].[TBDD_CFG_FUNCTION_MODULE]
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AFTER UPDATE
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english'
)
IF CONTEXT_INFO() IS NULL OR CONTEXT_INFO() <> 0x544244445F46554E4354494F4E5F4D4F44554C45
BEGIN
THROW 51102, 'Direktes UPDATE auf [_meta].[TBDD_CFG_FUNCTION_MODULE] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_FUNCTION_MODULE] verwenden.', 1;
END;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_FUNCTION_MODULE_IO_DEL]
ON [_meta].[TBDD_CFG_FUNCTION_MODULE]
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AFTER DELETE
AS
BEGIN ATOMIC WITH
(
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english'
)
IF CONTEXT_INFO() IS NULL OR CONTEXT_INFO() <> 0x544244445F46554E4354494F4E5F4D4F44554C45
BEGIN
THROW 51103, 'Direktes DELETE auf [_meta].[TBDD_CFG_FUNCTION_MODULE] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_DELETE_FUNCTION_MODULE] verwenden.', 1;
END;
END;
GO

View File

@@ -0,0 +1,74 @@
/* ============================================================================
SYSTEM_INFO TABELLEN-SKRIPT
Voraussetzung: Schema [_meta] existiert (siehe [SCHEMA_META].sql)
============================================================================ */
USE [DD_IIM];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRAN;
IF OBJECT_ID(N'_meta.TBDD_CFG_SYSTEM_INFO', N'U') IS NULL
BEGIN
CREATE TABLE [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[PK_CFG_SYSTEM_INFO_ID] BIGINT IDENTITY(1,1) NOT NULL,
[SYSTEM_VERSION] NVARCHAR(50) NOT NULL,
[COMMENT] NVARCHAR(4000) NULL,
[CREATED_WHO] BIGINT NOT NULL,
[CREATED_WHEN] DATETIME2(0) NOT NULL,
[CHANGED_WHO] BIGINT NULL,
[CHANGED_WHEN] DATETIME2(0) NULL
);
END;
IF NOT EXISTS
(
SELECT 1
FROM sys.key_constraints kc
JOIN sys.tables t ON t.object_id = kc.parent_object_id
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE s.name = N'_meta'
AND t.name = N'TBDD_CFG_SYSTEM_INFO'
AND kc.type = N'PK'
)
BEGIN
ALTER TABLE [_meta].[TBDD_CFG_SYSTEM_INFO]
ADD CONSTRAINT [PK_CFG_SYSTEM_INFO_ID]
PRIMARY KEY CLUSTERED ([PK_CFG_SYSTEM_INFO_ID]);
END;
IF NOT EXISTS (SELECT 1 FROM [_meta].[TBDD_CFG_SYSTEM_INFO] WITH (HOLDLOCK, UPDLOCK))
BEGIN
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN]
)
VALUES
(
N'1.0.0.0',
N'Initiale Anlage',
1,
GETDATE()
);
END;
COMMIT TRAN;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRAN;
DECLARE @msg NVARCHAR(4000) = ERROR_MESSAGE();
DECLARE @num INT = ERROR_NUMBER();
DECLARE @sev INT = ERROR_SEVERITY();
DECLARE @stt INT = ERROR_STATE();
RAISERROR(N'Fehler %d: %s', @sev, @stt, @num, @msg);
END CATCH;
GO

View File

@@ -0,0 +1,139 @@
/* ============================================================================
SYSTEM_INFO PROZEDUREN
Voraussetzung: Tabelle [_meta].[TBDD_CFG_SYSTEM_INFO] existiert
============================================================================ */
USE [DD_IIM];
GO
DROP PROCEDURE IF EXISTS [_meta].[PRDD_INSERT_SYSTEM_INFO];
DROP PROCEDURE IF EXISTS [_meta].[PRDD_UPDATE_SYSTEM_INFO];
GO
CREATE OR ALTER PROCEDURE [_meta].[PRDD_UPSERT_SYSTEM_INFO]
@PK_CFG_SYSTEM_INFO_ID BIGINT = NULL,
@SYSTEM_VERSION NVARCHAR(50),
@COMMENT NVARCHAR(4000) = NULL,
@CREATED_WHO BIGINT,
@CREATED_WHEN DATETIME2(0),
@CHANGED_WHO BIGINT = NULL,
@CHANGED_WHEN DATETIME2(0) = NULL,
@OUT_PK_CFG_SYSTEM_INFO_ID BIGINT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @identity_insert_enabled BIT = 0;
BEGIN TRY
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = 1;
IF @PK_CFG_SYSTEM_INFO_ID IS NULL
BEGIN
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = 0;
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
VALUES
(
@SYSTEM_VERSION,
@COMMENT,
@CREATED_WHO,
@CREATED_WHEN,
@CHANGED_WHO,
@CHANGED_WHEN
);
SET @OUT_PK_CFG_SYSTEM_INFO_ID = CAST(@@IDENTITY AS BIGINT);
END
ELSE
BEGIN
UPDATE [_meta].[TBDD_CFG_SYSTEM_INFO]
SET [SYSTEM_VERSION] = @SYSTEM_VERSION,
[COMMENT] = @COMMENT,
[CHANGED_WHO] = @CHANGED_WHO,
[CHANGED_WHEN] = @CHANGED_WHEN
WHERE [PK_CFG_SYSTEM_INFO_ID] = @PK_CFG_SYSTEM_INFO_ID;
IF @@ROWCOUNT = 0
BEGIN
SET @identity_insert_enabled = 1;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = 1;
SET IDENTITY_INSERT [_meta].[TBDD_CFG_SYSTEM_INFO] ON;
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[PK_CFG_SYSTEM_INFO_ID],
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
VALUES
(
@PK_CFG_SYSTEM_INFO_ID,
@SYSTEM_VERSION,
@COMMENT,
@CREATED_WHO,
@CREATED_WHEN,
@CHANGED_WHO,
@CHANGED_WHEN
);
SET IDENTITY_INSERT [_meta].[TBDD_CFG_SYSTEM_INFO] OFF;
SET @identity_insert_enabled = 0;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = 0;
END;
SET @OUT_PK_CFG_SYSTEM_INFO_ID = @PK_CFG_SYSTEM_INFO_ID;
END;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = NULL;
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
END TRY
BEGIN CATCH
IF @identity_insert_enabled = 1
BEGIN
BEGIN TRY
SET IDENTITY_INSERT [_meta].[TBDD_CFG_SYSTEM_INFO] OFF;
END TRY
BEGIN CATCH
END CATCH
END;
EXEC sys.sp_set_session_context @key = N'_meta_tbdd_system_info_use_input_pk', @value = NULL;
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
THROW;
END CATCH
END;
GO
CREATE OR ALTER PROCEDURE [_meta].[PRDD_DELETE_SYSTEM_INFO]
@PK_CFG_SYSTEM_INFO_ID BIGINT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = 1;
DELETE FROM [_meta].[TBDD_CFG_SYSTEM_INFO]
WHERE [PK_CFG_SYSTEM_INFO_ID] = @PK_CFG_SYSTEM_INFO_ID;
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
END TRY
BEGIN CATCH
EXEC sys.sp_set_session_context @key = N'_meta_allow_tbdd_system_info_dml', @value = NULL;
THROW;
END CATCH
END;
GO

View File

@@ -0,0 +1,114 @@
/* ============================================================================
SYSTEM_INFO TRIGGER
Voraussetzung: Tabelle [_meta].[TBDD_CFG_SYSTEM_INFO] und Prozeduren existieren
============================================================================ */
USE [DD_IIM];
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_SYSTEM_INFO_IO_INS]
ON [_meta].[TBDD_CFG_SYSTEM_INFO]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF TRY_CAST(SESSION_CONTEXT(N'_meta_allow_tbdd_system_info_dml') AS bit) = 1
BEGIN
IF TRY_CAST(SESSION_CONTEXT(N'_meta_tbdd_system_info_use_input_pk') AS bit) = 1
BEGIN
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[PK_CFG_SYSTEM_INFO_ID],
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
SELECT
i.[PK_CFG_SYSTEM_INFO_ID],
i.[SYSTEM_VERSION],
i.[COMMENT],
i.[CREATED_WHO],
i.[CREATED_WHEN],
i.[CHANGED_WHO],
i.[CHANGED_WHEN]
FROM inserted i;
END
ELSE
BEGIN
INSERT INTO [_meta].[TBDD_CFG_SYSTEM_INFO]
(
[SYSTEM_VERSION],
[COMMENT],
[CREATED_WHO],
[CREATED_WHEN],
[CHANGED_WHO],
[CHANGED_WHEN]
)
SELECT
i.[SYSTEM_VERSION],
i.[COMMENT],
i.[CREATED_WHO],
i.[CREATED_WHEN],
i.[CHANGED_WHO],
i.[CHANGED_WHEN]
FROM inserted i;
END;
RETURN;
END;
THROW 51001, 'Direktes INSERT auf [_meta].[TBDD_CFG_SYSTEM_INFO] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_SYSTEM_INFO] verwenden.', 1;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_SYSTEM_INFO_IO_UPD]
ON [_meta].[TBDD_CFG_SYSTEM_INFO]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF TRY_CAST(SESSION_CONTEXT(N'_meta_allow_tbdd_system_info_dml') AS bit) = 1
BEGIN
UPDATE t
SET t.[SYSTEM_VERSION] = i.[SYSTEM_VERSION],
t.[COMMENT] = i.[COMMENT],
t.[CREATED_WHO] = i.[CREATED_WHO],
t.[CREATED_WHEN] = i.[CREATED_WHEN],
t.[CHANGED_WHO] = i.[CHANGED_WHO],
t.[CHANGED_WHEN] = i.[CHANGED_WHEN]
FROM [_meta].[TBDD_CFG_SYSTEM_INFO] t
JOIN inserted i
ON i.[PK_CFG_SYSTEM_INFO_ID] = t.[PK_CFG_SYSTEM_INFO_ID];
RETURN;
END;
THROW 51002, 'Direktes UPDATE auf [_meta].[TBDD_CFG_SYSTEM_INFO] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_UPSERT_SYSTEM_INFO] verwenden.', 1;
END;
GO
CREATE OR ALTER TRIGGER [_meta].[TBDD_CFG_SYSTEM_INFO_IO_DEL]
ON [_meta].[TBDD_CFG_SYSTEM_INFO]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
IF TRY_CAST(SESSION_CONTEXT(N'_meta_allow_tbdd_system_info_dml') AS bit) = 1
BEGIN
DELETE t
FROM [_meta].[TBDD_CFG_SYSTEM_INFO] t
JOIN deleted d
ON d.[PK_CFG_SYSTEM_INFO_ID] = t.[PK_CFG_SYSTEM_INFO_ID];
RETURN;
END;
THROW 51003, 'Direktes DELETE auf [_meta].[TBDD_CFG_SYSTEM_INFO] ist nicht erlaubt. Bitte Prozedur [_meta].[PRDD_DELETE_SYSTEM_INFO] verwenden.', 1;
END;
GO