Serverumzug
This commit is contained in:
36
current/[DD_IIM]-Database/[MASTER_DEPLOY].sql
Normal file
36
current/[DD_IIM]-Database/[MASTER_DEPLOY].sql
Normal 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.';
|
||||
12
current/[DD_IIM]-Database/[SCHEMA_META].sql
Normal file
12
current/[DD_IIM]-Database/[SCHEMA_META].sql
Normal 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
|
||||
28
current/[DD_IIM]-Database/[SECURITY_META_CFG].sql
Normal file
28
current/[DD_IIM]-Database/[SECURITY_META_CFG].sql
Normal 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>];
|
||||
*/
|
||||
83
current/[DD_IIM]-Database/[TBDD_CFG_FUNCTION_MODULE].sql
Normal file
83
current/[DD_IIM]-Database/[TBDD_CFG_FUNCTION_MODULE].sql
Normal 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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
74
current/[DD_IIM]-Database/[TBDD_CFG_SYSTEM_INFO].sql
Normal file
74
current/[DD_IIM]-Database/[TBDD_CFG_SYSTEM_INFO].sql
Normal 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
|
||||
139
current/[DD_IIM]-Database/[TBDD_CFG_SYSTEM_INFO_PROCEDURES].sql
Normal file
139
current/[DD_IIM]-Database/[TBDD_CFG_SYSTEM_INFO_PROCEDURES].sql
Normal 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
|
||||
114
current/[DD_IIM]-Database/[TBDD_CFG_SYSTEM_INFO_TRIGGER].sql
Normal file
114
current/[DD_IIM]-Database/[TBDD_CFG_SYSTEM_INFO_TRIGGER].sql
Normal 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
|
||||
Reference in New Issue
Block a user