From de36605b8d7f8927e3629a96332f8e433e6d62a0 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Fri, 20 Dec 2024 14:42:06 +0100 Subject: [PATCH] MS Diverse Anpassungen EnvelopeCreator, DDECM, Maintenance, Funktionsbausteine, IDB --- .../01_DD_ECM/Update/1.9.7.8.sql | 131 + .../01_DD_ECM/Update/1.9.7.9.sql | 2487 +++++++++++++++++ 00_DB_SETUP_SINGLE/01_IDB/CreateDBObjects.sql | 448 ++- .../08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.0.sql | Bin 5710 -> 5720 bytes .../08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.1.sql | Bin 0 -> 5204 bytes .../{Update_1.1.0.1.sql => 1.1.0.1.sql} | 0 .../{Update_1.1.0.2.sql => 1.1.0.2.sql} | 0 .../10_ENVELOPE_CREATOR/1.5.1.0.sql | 18 + .../10_ENVELOPE_CREATOR/1.5.2.0.sql | 40 + .../10_ENVELOPE_CREATOR/SIG_CREATE.sql | Bin 30910 -> 31104 bytes .../SIG_CREATE_BACKUP_1372.sql | Bin 29780 -> 0 bytes .../SIG_CREATE_BASE_1372.sql | Bin 28858 -> 0 bytes .../SIG_CREATE_LOCAL_1372.sql | Bin 29780 -> 0 bytes .../SIG_CREATE_REMOTE_1372.sql | Bin 28812 -> 0 bytes 14 files changed, 2843 insertions(+), 281 deletions(-) create mode 100644 00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.8.sql create mode 100644 00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.9.sql create mode 100644 01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.1.sql rename 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/{Update_1.1.0.1.sql => 1.1.0.1.sql} (100%) rename 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/{Update_1.1.0.2.sql => 1.1.0.2.sql} (100%) create mode 100644 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.1.0.sql create mode 100644 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.2.0.sql delete mode 100644 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BACKUP_1372.sql delete mode 100644 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BASE_1372.sql delete mode 100644 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_LOCAL_1372.sql delete mode 100644 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_REMOTE_1372.sql diff --git a/00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.8.sql b/00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.8.sql new file mode 100644 index 0000000..2c56faf --- /dev/null +++ b/00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.8.sql @@ -0,0 +1,131 @@ +USE [DD_ECM] + +UPDATE TBDD_BASECONFIG SET DB_VERSION = '1.9.7.8'; +GO +IF NOT EXISTS(SELECT 1 FROM sys.columns + WHERE Name = N'LICENSE_VALID' + AND Object_ID = Object_ID(N'TBDD_MODULES')) +BEGIN + ALTER TABLE TBDD_MODULES + ADD LICENSE_VALID BIT NOT NULL + CONSTRAINT TBDD_MODULES_LICENSE_VALID_DEF DEFAULT 1 + WITH VALUES +END +GO +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +CREATE OR ALTER FUNCTION [dbo].[FNDD_CONVERT_RTF2Text] +( + @rtf nvarchar(max) +) +RETURNS nvarchar(max) +AS +BEGIN + DECLARE @Pos1 int; + DECLARE @Pos2 int; + DECLARE @hex varchar(316); + DECLARE @Stage table + ( + [Char] char(1), + [Pos] int + ); + + INSERT @Stage + ( + [Char] + , [Pos] + ) + SELECT SUBSTRING(@rtf, [Number], 1) + , [Number] + FROM [master]..[spt_values] + WHERE ([Type] = 'p') + AND (SUBSTRING(@rtf, Number, 1) IN ('{', '}')); + + SELECT @Pos1 = MIN([Pos]) + , @Pos2 = MAX([Pos]) + FROM @Stage; + + DELETE + FROM @Stage + WHERE ([Pos] IN (@Pos1, @Pos2)); + + WHILE (1 = 1) + BEGIN + SELECT TOP 1 @Pos1 = s1.[Pos] + , @Pos2 = s2.[Pos] + FROM @Stage s1 + INNER JOIN @Stage s2 ON s2.[Pos] > s1.[Pos] + WHERE (s1.[Char] = '{') + AND (s2.[Char] = '}') + ORDER BY s2.[Pos] - s1.[Pos]; + + IF @@ROWCOUNT = 0 + BREAK + + DELETE + FROM @Stage + WHERE ([Pos] IN (@Pos1, @Pos2)); + + UPDATE @Stage + SET [Pos] = [Pos] - @Pos2 + @Pos1 - 1 + WHERE ([Pos] > @Pos2); + + SET @rtf = STUFF(@rtf, @Pos1, @Pos2 - @Pos1 + 1, ''); + END + + SET @rtf = REPLACE(@rtf, '\pard', ''); + SET @rtf = REPLACE(@rtf, '\par', ''); + SET @rtf = STUFF(@rtf, 1, CHARINDEX(' ', @rtf), ''); + + WHILE (Right(@rtf, 1) IN (' ', CHAR(13), CHAR(10), '}')) + BEGIN + SELECT @rtf = SUBSTRING(@rtf, 1, (LEN(@rtf + 'x') - 2)); + IF LEN(@rtf) = 0 BREAK + END + + SET @Pos1 = CHARINDEX('\''', @rtf); + + WHILE @Pos1 > 0 + BEGIN + IF @Pos1 > 0 + BEGIN + SET @hex = '0x' + SUBSTRING(@rtf, @Pos1 + 2, 2); + SET @rtf = REPLACE(@rtf, SUBSTRING(@rtf, @Pos1, 4),CHAR(CONVERT(int, CONVERT (binary(1), @hex,1)))); + SET @Pos1 = CHARINDEX('\''', @rtf); + END + END + + SET @rtf = @rtf + ' '; + + SET @Pos1 = PATINDEX('%\%[0123456789][\ ]%', @rtf); + + WHILE @Pos1 > 0 + BEGIN + SET @Pos2 = CHARINDEX(' ', @rtf, @Pos1 + 1); + + IF @Pos2 < @Pos1 + SET @Pos2 = CHARINDEX('\', @rtf, @Pos1 + 1); + + IF @Pos2 < @Pos1 + BEGIN + SET @rtf = SUBSTRING(@rtf, 1, @Pos1 - 1); + SET @Pos1 = 0; + END + ELSE + BEGIN + SET @rtf = STUFF(@rtf, @Pos1, @Pos2 - @Pos1 + 1, ''); + SET @Pos1 = PATINDEX('%\%[0123456789][\ ]%', @rtf); + END + END + + SET @rtf = REPLACE(@rtf,char(10),' '); + SET @rtf = REPLACE(@rtf,char(13),' '); + SET @rtf = REPLACE(@rtf,' ',' '); + SET @rtf = REPLACE(@rtf,' ',' '); + SET @rtf = LTRIM(RTRIM(@rtf)); + + RETURN @rtf; +END \ No newline at end of file diff --git a/00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.9.sql b/00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.9.sql new file mode 100644 index 0000000..c2fd6e6 --- /dev/null +++ b/00_DB_SETUP_SINGLE/01_DD_ECM/Update/1.9.7.9.sql @@ -0,0 +1,2487 @@ +------------------------------------------------ +-----ATTENTION BEFORE RUNNING THIS SCRIPT ------ +------------------------------------------------ +--REPLACE [windreamDB] WIHT THE ACTUAL NAME OF +--THE WINDREAM DATABASE-NAME +------------------------------------------------ + + +USE [DD_ECM] +UPDATE TBDD_BASECONFIG SET DB_VERSION = '1.9.7.9'; +GO +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [FNDD_CONVERT_RTF2Text] +-- ================================================================= +-- Converts a RTF text to a regular text +-- +-- Returns: NVARCHAR - text +-- ================================================================= +-- Copyright (c) 2024 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: 26.09.2024 / HE,MK +-- Version Date / Editor: 14.12.2024 / HE,MK +-- Version Number: 1.1.0.0 +-- ================================================================= +-- History: +-- 26.09.2024 / HE,MK - First Version +-- 14.12.2024 / MK - code optimisation, new additional parameters + +CREATE OR ALTER FUNCTION [dbo].[FNDD_CONVERT_RTF2Text]( + @pRTF nvarchar(max), -- Give the RTF text, you want to convert + @pREMOVE_LINE_WRAP BIT = 1, -- Set to 1 to remove line wraps + @pREMOVE_DOUBLE_BLANKS BIT = 1 -- Set to 1 to remove unnecessary blanks +) +RETURNS nvarchar(max) +AS +BEGIN + + -- decalare new vars because of parameter sniffing + DECLARE @RTF NVARCHAR(256) = ISNULL(@pRTF,''), + @REMOVE_LINE_WRAP BIT = ISNULL(@pREMOVE_LINE_WRAP,1), + @REMOVE_DOUBLE_BLANKS BIT = ISNULL(@pREMOVE_DOUBLE_BLANKS,1); + + -- decalare runtime vars + DECLARE @Pos1 int, + @Pos2 int, + @hex varchar(316); + + DECLARE @Stage table ([Char] char(1), [Pos] int); + + IF (LEN(@RTF) > 1) BEGIN + + INSERT @Stage ([Char], [Pos]) + + SELECT SUBSTRING(@rtf, [Number], 1), + [Number] + FROM [master]..[spt_values] + WHERE ([Type] = 'p') + AND (SUBSTRING(@rtf, Number, 1) IN ('{', '}')); + + SELECT @Pos1 = MIN([Pos]) + , @Pos2 = MAX([Pos]) + FROM @Stage; + + DELETE + FROM @Stage + WHERE ([Pos] IN (@Pos1, @Pos2)); + + WHILE (1 = 1) BEGIN + SELECT TOP 1 @Pos1 = s1.[Pos] + , @Pos2 = s2.[Pos] + FROM @Stage s1 + INNER JOIN @Stage s2 ON s2.[Pos] > s1.[Pos] + WHERE (s1.[Char] = '{') + AND (s2.[Char] = '}') + ORDER BY s2.[Pos] - s1.[Pos]; + + IF @@ROWCOUNT = 0 + BREAK + + DELETE + FROM @Stage + WHERE ([Pos] IN (@Pos1, @Pos2)); + + UPDATE @Stage + SET [Pos] = [Pos] - @Pos2 + @Pos1 - 1 + WHERE ([Pos] > @Pos2); + + SET @rtf = STUFF(@rtf, @Pos1, @Pos2 - @Pos1 + 1, ''); + END; + + SET @rtf = REPLACE(@rtf, '\pard', ''); + SET @rtf = REPLACE(@rtf, '\par', ''); + SET @rtf = STUFF(@rtf, 1, CHARINDEX(' ', @rtf), ''); + + WHILE (Right(@rtf, 1) IN (' ', CHAR(13), CHAR(10), '}')) BEGIN + SELECT @rtf = SUBSTRING(@rtf, 1, (LEN(@rtf + 'x') - 2)); + IF LEN(@rtf) = 0 BREAK + END; + + SET @Pos1 = CHARINDEX('\''', @rtf); + + WHILE (@Pos1 > 0) BEGIN + IF (@Pos1 > 0) BEGIN + SET @hex = '0x' + SUBSTRING(@rtf, @Pos1 + 2, 2); + SET @rtf = REPLACE(@rtf, SUBSTRING(@rtf, @Pos1, 4),CHAR(CONVERT(int, CONVERT (binary(1), @hex,1)))); + SET @Pos1 = CHARINDEX('\''', @rtf); + END; + END; + + SET @rtf = @rtf + ' '; + SET @Pos1 = PATINDEX('%\%[0123456789][\ ]%', @rtf); + + WHILE (@Pos1 > 0) BEGIN + + SET @Pos2 = CHARINDEX(' ', @rtf, @Pos1 + 1); + + IF (@Pos2 < @Pos1) BEGIN + SET @Pos2 = CHARINDEX('\', @rtf, @Pos1 + 1); + END; + + IF (@Pos2 < @Pos1) BEGIN + SET @rtf = SUBSTRING(@rtf, 1, @Pos1 - 1); + SET @Pos1 = 0; + END; ELSE BEGIN + SET @rtf = STUFF(@rtf, @Pos1, @Pos2 - @Pos1 + 1, ''); + SET @Pos1 = PATINDEX('%\%[0123456789][\ ]%', @rtf); + END; + END; + + IF (@REMOVE_LINE_WRAP = 1) BEGIN + SET @rtf = REPLACE(@rtf,char(10),' '); + SET @rtf = REPLACE(@rtf,char(13),' '); + END; + + IF (@REMOVE_DOUBLE_BLANKS = 1) BEGIN + WHILE (@rtf like '% %') BEGIN + IF (@rtf like '% %') BEGIN + SET @rtf = REPLACE(@rtf,' ',' '); + END; + END; + END; + + -- Anyway remove trailing spaces + SET @rtf = LTRIM(RTRIM(@rtf)); + + END; + + RETURN @rtf; + +END; +GO +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [FNDD_GET_WINDREAM_CHOICELIST_ITEMS] +-- ================================================================= +-- Reads the windream database choice list and gives the +-- choice list items +-- +-- Returns: Table (1 column) +-- ================================================================= +-- Copyright (c) 2024 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: 13.12.2024 / MK +-- Version Date / Editor: 13.12.2024 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 13.12.2024 / MK - First Version + +CREATE OR ALTER FUNCTION [dbo].[FNDD_GET_WINDREAM_CHOICELIST_ITEMS] ( + @szListName NVARCHAR(255) +) +RETURNS TABLE +AS +RETURN + + SELECT TOP (100) PERCENT [szValue] as 'Auswahlliste' + FROM [windreamDB].[dbo].[ChoiceListItem] + WHERE [dwChoiceListID] = (SELECT [dwChoiceListID] FROM [windreamDB].[dbo].[ChoiceList] WHERE [szListName] = @szListName) + AND LEN([szValue]) > 0 + ORDER BY [Auswahlliste] ASC +GO +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [FNDD_GET_WINDREAM_INDEX_VALUES] +-- ================================================================= +-- Reads the windream database attributes to gives the index value +-- of a regular index or a vector index +-- +-- Returns: Table (7 columns) +-- ================================================================= +-- Copyright (c) 2024 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: 13.12.2024 / MK +-- Version Date / Editor: 13.12.2024 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 13.12.2024 / MK - First Version + + +CREATE OR ALTER FUNCTION [dbo].[FNDD_GET_WINDREAM_INDEX_VALUES] ( + @pdwDocID BIGINT, -- Give windream DocID, eg. 4711 + @pszAttrName NVARCHAR(255) -- Give name of the windream Index, eg 'String 37' +) +RETURNS @Table TABLE ([COUNTER] BIGINT IDENTITY(1, 1), [COUNT] BIGINT, [VALUE] NVARCHAR(max), [SOURCE_TYPE] NVARCHAR(50), [SOURCE_TABLE] NVARCHAR(50), [SOURCE_COLUMN] NVARCHAR(50), [SOURCE_COLUMN_SIZE] INT) +AS +BEGIN + + DECLARE @dwDocID BIGINT = @pdwDocID, + @szAttrName NVARCHAR(255) = @pszAttrName; + + DECLARE @VectorCount INT = 0, + @dwAttrSize INT = 0, + @dwAttrID BIGINT = 0, + @dwAttrType BIGINT = 0, + @szTableName NVARCHAR(255) = NULL, + @szColumnName NVARCHAR(255) = NULL; + + DECLARE @Attribute TABLE ([dwAttrID] BIGINT, [dwAttrType] BIGINT, [szTableName] NVARCHAR(255), [szColumnName] NVARCHAR(255), [dwAttrSize] INT); + ------------------------------------------------------------------------------------------------------------ + + INSERT INTO @Attribute ([dwAttrID], [dwAttrType], [szTableName], [szColumnName], [dwAttrSize]) + SELECT TOP 1 [dwAttrID], [dwAttrType], [szTableName], [szColumnName], [dwAttrSize] + FROM [windreamDB].[dbo].[Attribute] (NOLOCK) WHERE [szAttrName] = @szAttrName; + ------------------------------------------------------------------------------------------------------------ + + IF ((SELECT COUNT(*) FROM @Attribute) > 0) BEGIN + + SELECT @dwAttrID = [dwAttrID], + @dwAttrType = [dwAttrType], + @szTableName = [szTableName], + @szColumnName = [szColumnName], + @dwAttrSize = [dwAttrSize] + FROM @Attribute; + ------------------------------------------------------------------------------------------------------------ + + IF ((@dwAttrID > 0) and (@dwAttrType > 0) and (LEN(@szTableName) > 0) and (LEN(@szColumnName) > 0)) BEGIN + + IF (@szTableName = 'BaseAttributes') BEGIN + + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT + COUNT(*), + CASE + WHEN @szColumnName = 'dwDocID' THEN (SELECT CONVERT(NVARCHAR,[dwDocID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDocDBID' THEN (SELECT CONVERT(NVARCHAR,[dwDocDBID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwParentID' THEN (SELECT CONVERT(NVARCHAR,[dwParentID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwParentDBID' THEN (SELECT CONVERT(NVARCHAR,[dwParentDBID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwObjectTypeID' THEN (SELECT CONVERT(NVARCHAR,[dwObjectTypeID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwObjectTypeDBID' THEN (SELECT CONVERT(NVARCHAR,[dwObjectTypeDBID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwCatalogID' THEN (SELECT CONVERT(NVARCHAR,[dwCatalogID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwCreatorID' THEN (SELECT CONVERT(NVARCHAR,[dwCreatorID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szCreatorName' THEN (SELECT CONVERT(NVARCHAR,[szCreatorName]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwVersionNumber' THEN (SELECT CONVERT(NVARCHAR,[dwVersionNumber]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwVersionID' THEN (SELECT CONVERT(NVARCHAR,[dwVersionID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szLongName' THEN (SELECT CONVERT(NVARCHAR,[szLongName]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szUpperLongName' THEN (SELECT CONVERT(NVARCHAR,[szUpperLongName]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szShortName' THEN (SELECT CONVERT(NVARCHAR,[szShortName]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szUpperShortName' THEN (SELECT CONVERT(NVARCHAR,[szUpperShortName]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwSize' THEN (SELECT CONVERT(NVARCHAR,[dwSize]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'decCreationTime' THEN (SELECT CONVERT(NVARCHAR,[decCreationTime]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'decAccessTime' THEN (SELECT CONVERT(NVARCHAR,[decAccessTime]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'decChangedTime' THEN (SELECT CONVERT(NVARCHAR,[decChangedTime]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwChangeCount' THEN (SELECT CONVERT(NVARCHAR,[dwChangeCount]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwFSFlags' THEN (SELECT CONVERT(NVARCHAR,[dwFSFlags]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwFlags' THEN (SELECT CONVERT(NVARCHAR,[dwFlags]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwOwnerID' THEN (SELECT CONVERT(NVARCHAR,[dwOwnerID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwOwnerDBID' THEN (SELECT CONVERT(NVARCHAR,[dwOwnerDBID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwWorkLockUserID' THEN (SELECT CONVERT(NVARCHAR,[dwWorkLockUserID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwWorkLockUserDBID' THEN (SELECT CONVERT(NVARCHAR,[dwWorkLockUserDBID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwFlags2' THEN (SELECT CONVERT(NVARCHAR,[dwFlags2]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwUserFlags' THEN (SELECT CONVERT(NVARCHAR,[dwUserFlags]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwEditDate' THEN (SELECT CONVERT(NVARCHAR,[dwEditDate]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwArchiveDate' THEN (SELECT CONVERT(NVARCHAR,[dwArchiveDate]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwEditPeriod' THEN (SELECT CONVERT(NVARCHAR,[dwEditPeriod]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwArchivePeriod' THEN (SELECT CONVERT(NVARCHAR,[dwArchivePeriod]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szReference' THEN (SELECT CONVERT(NVARCHAR,[szReference]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwCreationDate' THEN (SELECT CONVERT(NVARCHAR,[dwCreationDate]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwChangeDate' THEN (SELECT CONVERT(NVARCHAR,[dwChangeDate]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwTypeAssignDate' THEN (SELECT CONVERT(NVARCHAR,[dwTypeAssignDate]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwCreation_Time' THEN (SELECT CONVERT(NVARCHAR,[dwCreation_Time]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwChange_Time' THEN (SELECT CONVERT(NVARCHAR,[dwChange_Time]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwTypeAssign_Time' THEN (SELECT CONVERT(NVARCHAR,[dwTypeAssign_Time]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szDisplay_Name' THEN (SELECT CONVERT(NVARCHAR,[szDisplay_Name]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwAccessListID' THEN (SELECT CONVERT(NVARCHAR,[dwAccessListID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwAccessListDBID' THEN (SELECT CONVERT(NVARCHAR,[dwAccessListDBID]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szFile_Ext' THEN (SELECT CONVERT(NVARCHAR,[szFile_Ext]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szWM_Store' THEN (SELECT CONVERT(NVARCHAR,[szWM_Store]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText00' THEN (SELECT CONVERT(NVARCHAR,[szText00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText01' THEN (SELECT CONVERT(NVARCHAR,[szText01]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText02' THEN (SELECT CONVERT(NVARCHAR,[szText02]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText03' THEN (SELECT CONVERT(NVARCHAR,[szText03]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText04' THEN (SELECT CONVERT(NVARCHAR,[szText04]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText05' THEN (SELECT CONVERT(NVARCHAR,[szText05]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText06' THEN (SELECT CONVERT(NVARCHAR,[szText06]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText07' THEN (SELECT CONVERT(NVARCHAR,[szText07]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText08' THEN (SELECT CONVERT(NVARCHAR,[szText08]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText09' THEN (SELECT CONVERT(NVARCHAR,[szText09]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText10' THEN (SELECT CONVERT(NVARCHAR,[szText10]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText11' THEN (SELECT CONVERT(NVARCHAR,[szText11]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText12' THEN (SELECT CONVERT(NVARCHAR,[szText12]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText13' THEN (SELECT CONVERT(NVARCHAR,[szText13]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText14' THEN (SELECT CONVERT(NVARCHAR,[szText14]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText15' THEN (SELECT CONVERT(NVARCHAR,[szText15]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText16' THEN (SELECT CONVERT(NVARCHAR,[szText16]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText17' THEN (SELECT CONVERT(NVARCHAR,[szText17]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText18' THEN (SELECT CONVERT(NVARCHAR,[szText18]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText19' THEN (SELECT CONVERT(NVARCHAR,[szText19]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText20' THEN (SELECT CONVERT(NVARCHAR,[szText20]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText21' THEN (SELECT CONVERT(NVARCHAR,[szText21]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText22' THEN (SELECT CONVERT(NVARCHAR,[szText22]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText23' THEN (SELECT CONVERT(NVARCHAR,[szText23]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText24' THEN (SELECT CONVERT(NVARCHAR,[szText24]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText25' THEN (SELECT CONVERT(NVARCHAR,[szText25]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText26' THEN (SELECT CONVERT(NVARCHAR,[szText26]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText27' THEN (SELECT CONVERT(NVARCHAR,[szText27]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText28' THEN (SELECT CONVERT(NVARCHAR,[szText28]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText29' THEN (SELECT CONVERT(NVARCHAR,[szText29]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText30' THEN (SELECT CONVERT(NVARCHAR,[szText30]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText31' THEN (SELECT CONVERT(NVARCHAR,[szText31]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText32' THEN (SELECT CONVERT(NVARCHAR,[szText32]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText33' THEN (SELECT CONVERT(NVARCHAR,[szText33]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText34' THEN (SELECT CONVERT(NVARCHAR,[szText34]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText35' THEN (SELECT CONVERT(NVARCHAR,[szText35]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText36' THEN (SELECT CONVERT(NVARCHAR,[szText36]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText37' THEN (SELECT CONVERT(NVARCHAR,[szText37]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText38' THEN (SELECT CONVERT(NVARCHAR,[szText38]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'szText39' THEN (SELECT CONVERT(NVARCHAR,[szText39]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger00' THEN (SELECT CONVERT(NVARCHAR,[dwInteger00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger01' THEN (SELECT CONVERT(NVARCHAR,[dwInteger01]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger02' THEN (SELECT CONVERT(NVARCHAR,[dwInteger02]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger03' THEN (SELECT CONVERT(NVARCHAR,[dwInteger03]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger04' THEN (SELECT CONVERT(NVARCHAR,[dwInteger04]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger05' THEN (SELECT CONVERT(NVARCHAR,[dwInteger05]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger06' THEN (SELECT CONVERT(NVARCHAR,[dwInteger06]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger07' THEN (SELECT CONVERT(NVARCHAR,[dwInteger07]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger08' THEN (SELECT CONVERT(NVARCHAR,[dwInteger08]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger09' THEN (SELECT CONVERT(NVARCHAR,[dwInteger09]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger10' THEN (SELECT CONVERT(NVARCHAR,[dwInteger10]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger11' THEN (SELECT CONVERT(NVARCHAR,[dwInteger11]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger12' THEN (SELECT CONVERT(NVARCHAR,[dwInteger12]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger13' THEN (SELECT CONVERT(NVARCHAR,[dwInteger13]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger14' THEN (SELECT CONVERT(NVARCHAR,[dwInteger14]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger15' THEN (SELECT CONVERT(NVARCHAR,[dwInteger15]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger16' THEN (SELECT CONVERT(NVARCHAR,[dwInteger16]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger17' THEN (SELECT CONVERT(NVARCHAR,[dwInteger17]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger18' THEN (SELECT CONVERT(NVARCHAR,[dwInteger18]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger19' THEN (SELECT CONVERT(NVARCHAR,[dwInteger19]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger20' THEN (SELECT CONVERT(NVARCHAR,[dwInteger20]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger21' THEN (SELECT CONVERT(NVARCHAR,[dwInteger21]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger22' THEN (SELECT CONVERT(NVARCHAR,[dwInteger22]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger23' THEN (SELECT CONVERT(NVARCHAR,[dwInteger23]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwInteger24' THEN (SELECT CONVERT(NVARCHAR,[dwInteger24]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate00' THEN (SELECT CONVERT(NVARCHAR,[dwDate00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate01' THEN (SELECT CONVERT(NVARCHAR,[dwDate01]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate02' THEN (SELECT CONVERT(NVARCHAR,[dwDate02]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate03' THEN (SELECT CONVERT(NVARCHAR,[dwDate03]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate04' THEN (SELECT CONVERT(NVARCHAR,[dwDate04]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate05' THEN (SELECT CONVERT(NVARCHAR,[dwDate05]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate06' THEN (SELECT CONVERT(NVARCHAR,[dwDate06]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate07' THEN (SELECT CONVERT(NVARCHAR,[dwDate07]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate08' THEN (SELECT CONVERT(NVARCHAR,[dwDate08]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwDate09' THEN (SELECT CONVERT(NVARCHAR,[dwDate09]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat00' THEN (SELECT CONVERT(NVARCHAR,[lfFloat00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat01' THEN (SELECT CONVERT(NVARCHAR,[lfFloat01]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat02' THEN (SELECT CONVERT(NVARCHAR,[lfFloat02]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat03' THEN (SELECT CONVERT(NVARCHAR,[lfFloat03]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat04' THEN (SELECT CONVERT(NVARCHAR,[lfFloat04]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat05' THEN (SELECT CONVERT(NVARCHAR,[lfFloat05]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat06' THEN (SELECT CONVERT(NVARCHAR,[lfFloat06]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat07' THEN (SELECT CONVERT(NVARCHAR,[lfFloat07]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat08' THEN (SELECT CONVERT(NVARCHAR,[lfFloat08]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat09' THEN (SELECT CONVERT(NVARCHAR,[lfFloat09]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat10' THEN (SELECT CONVERT(NVARCHAR,[lfFloat10]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat11' THEN (SELECT CONVERT(NVARCHAR,[lfFloat11]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat12' THEN (SELECT CONVERT(NVARCHAR,[lfFloat12]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat13' THEN (SELECT CONVERT(NVARCHAR,[lfFloat13]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'lfFloat14' THEN (SELECT CONVERT(NVARCHAR,[lfFloat14]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'blBool00' THEN (SELECT CONVERT(NVARCHAR,[blBool00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'blBool01' THEN (SELECT CONVERT(NVARCHAR,[blBool01]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'blBool02' THEN (SELECT CONVERT(NVARCHAR,[blBool02]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'blBool03' THEN (SELECT CONVERT(NVARCHAR,[blBool03]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'blBool04' THEN (SELECT CONVERT(NVARCHAR,[blBool04]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'decTimeStamp00' THEN (SELECT CONVERT(NVARCHAR,[decTimeStamp00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'decTimeStamp01' THEN (SELECT CONVERT(NVARCHAR,[decTimeStamp01]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'decCurrency00' THEN (SELECT CONVERT(NVARCHAR,[decCurrency00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar00' THEN (SELECT CONVERT(NVARCHAR,[wmVar00]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar01' THEN (SELECT CONVERT(NVARCHAR,[wmVar01]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar02' THEN (SELECT CONVERT(NVARCHAR,[wmVar02]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar03' THEN (SELECT CONVERT(NVARCHAR,[wmVar03]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar04' THEN (SELECT CONVERT(NVARCHAR,[wmVar04]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar05' THEN (SELECT CONVERT(NVARCHAR,[wmVar05]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar06' THEN (SELECT CONVERT(NVARCHAR,[wmVar06]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar07' THEN (SELECT CONVERT(NVARCHAR,[wmVar07]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar08' THEN (SELECT CONVERT(NVARCHAR,[wmVar08]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar09' THEN (SELECT CONVERT(NVARCHAR,[wmVar09]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar10' THEN (SELECT CONVERT(NVARCHAR,[wmVar10]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar11' THEN (SELECT CONVERT(NVARCHAR,[wmVar11]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar12' THEN (SELECT CONVERT(NVARCHAR,[wmVar12]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar13' THEN (SELECT CONVERT(NVARCHAR,[wmVar13]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar14' THEN (SELECT CONVERT(NVARCHAR,[wmVar14]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar15' THEN (SELECT CONVERT(NVARCHAR,[wmVar15]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar16' THEN (SELECT CONVERT(NVARCHAR,[wmVar16]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar17' THEN (SELECT CONVERT(NVARCHAR,[wmVar17]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar18' THEN (SELECT CONVERT(NVARCHAR,[wmVar18]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar19' THEN (SELECT CONVERT(NVARCHAR,[wmVar19]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar20' THEN (SELECT CONVERT(NVARCHAR,[wmVar20]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar21' THEN (SELECT CONVERT(NVARCHAR,[wmVar21]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar22' THEN (SELECT CONVERT(NVARCHAR,[wmVar22]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar23' THEN (SELECT CONVERT(NVARCHAR,[wmVar23]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar24' THEN (SELECT CONVERT(NVARCHAR,[wmVar24]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar25' THEN (SELECT CONVERT(NVARCHAR,[wmVar25]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar26' THEN (SELECT CONVERT(NVARCHAR,[wmVar26]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar27' THEN (SELECT CONVERT(NVARCHAR,[wmVar27]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar28' THEN (SELECT CONVERT(NVARCHAR,[wmVar28]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'wmVar29' THEN (SELECT CONVERT(NVARCHAR,[wmVar29]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + WHEN @szColumnName = 'dwILMRetention' THEN (SELECT CONVERT(NVARCHAR,[dwILMRetention]) FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) WHERE [dwDocID] = @dwDocID) + ELSE NULL + END AS ColumnValue, + @dwAttrType, + @szTableName, + @szColumnName, + @dwAttrSize + FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) + WHERE [dwDocID] = @dwDocID; + ------------------------------------------------------------------------------------------------------------ + + END; ELSE IF (@szTableName = 'Vector') BEGIN + + SELECT @VectorCount = COUNT(*) + FROM [windreamDB].[dbo].[Vector] (NOLOCK) + WHERE [dwDocID] = @dwDocID + AND [dwAttrID] = @dwAttrID; + + IF (@dwAttrType in (4097)) BEGIN -- String + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT @VectorCount, [szValue], @dwAttrType, @szTableName, 'szValue', @dwAttrSize + FROM [windreamDB].[dbo].[Vector] (NOLOCK) + WHERE [dwDocID] = @dwDocID + AND [dwAttrID] = @dwAttrID + GROUP BY [szValue]; + + END; ELSE IF (@dwAttrType in (4098,4107)) BEGIN -- Integer + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT @VectorCount, [dwValue], @dwAttrType, @szTableName, 'dwValue', @dwAttrSize + FROM [windreamDB].[dbo].[Vector] (NOLOCK) + WHERE [dwDocID] = @dwDocID + AND [dwAttrID] = @dwAttrID + GROUP BY [dwValue]; + + END; ELSE IF (@dwAttrType in (4099)) BEGIN -- Float + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT @VectorCount, [lfValue], @dwAttrType, @szTableName, 'lfValue', @dwAttrSize + FROM [windreamDB].[dbo].[Vector] (NOLOCK) + WHERE [dwDocID] = @dwDocID + AND [dwAttrID] = @dwAttrID + GROUP BY [lfValue]; + + END; ELSE IF (@dwAttrType in (8,4100,8204)) BEGIN -- Bool + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT @VectorCount, [blValue], @dwAttrType, @szTableName, 'blValue', @dwAttrSize + FROM [windreamDB].[dbo].[Vector] (NOLOCK) + WHERE [dwDocID] = @dwDocID + AND [dwAttrID] = @dwAttrID + GROUP BY [blValue]; + + END; ELSE IF (@dwAttrType in (4101)) BEGIN -- Date + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT @VectorCount, [decValue], @dwAttrType, @szTableName, 'decValue', @dwAttrSize + FROM [windreamDB].[dbo].[Vector] (NOLOCK) + WHERE [dwDocID] = @dwDocID + AND [dwAttrID] = @dwAttrID + GROUP BY [decValue]; + + END; ELSE BEGIN + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT 0, NULL, NULL, 'ERROR5', 'COLUMN NOT FOUND', NULL; + + END; + + -- Failsafe, to have at least one result + IF (SELECT COUNT(*) FROM @Table) = 0 BEGIN + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT 0, NULL, NULL, 'ERROR4', 'NO VALUE FOUND', NULL; + END; + + END; ELSE BEGIN + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT 0, NULL, NULL, 'ERROR3', 'TABLE NOT FOUND', NULL; + + END; + + END; ELSE BEGIN + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT 0, NULL, NULL, 'ERROR2', 'TABLE NOT FOUND', NULL; + + END; + + END; ELSE BEGIN + INSERT INTO @Table ([COUNT], [VALUE], [SOURCE_TYPE], [SOURCE_TABLE], [SOURCE_COLUMN], [SOURCE_COLUMN_SIZE]) + SELECT 0, NULL, NULL, 'ERROR1', 'INDEX NOT FOUND', NULL; + + END; + + RETURN; + +END; +GO +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDD_BACKUP_DATABASES] +-- ================================================================= +-- Saving database to LOCAL (!!) backup folder +-- Minimum requirement: MS SQL Server 2016 +-- +-- Returns: INT Value - 0 = Everything worked well +-- ================================================================= +-- Copyright (c) 2024 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: 13.12.2024 / MK +-- Version Date / Editor: 13.12.2024 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 13.12.2024 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDD_BACKUP_DATABASES] ( + @pCOMPRESSION BIT = 1, -- Set to 1 to compress the database backup file (This option is not available in SQL Express Versions!). Otherwise set to 0. + @pLOCALBACKUPPATH NVARCHAR(200) = 'F:\Sicherung', -- Set the LOCAL Backup path. If path doesnt exist, it will be created. + @pSUBDIRECTORY NVARCHAR(50) = 'Date_YYYYMMDD', -- Set 'Date_YYYYMMDD' (which is Failsafe) for a backup subdir like '\path\20241213'. Every other value will used a static subdirectory name for creation. + @pINCLUDEDB NVARCHAR(1000) = 'DD_ECM', -- Set a list of included databases. IF <> NULL, it will override the @pEXCLUDEDB Parameter. + @pEXCLUDEDB NVARCHAR(1000) = 'master,model,msdb,tempdb', -- Set a list of exluded databases. Default exclusen are the system databases. + @pLOGLEVEL NVARCHAR(25) = 'ERROR' -- Set to 'INFO','WARN' OR 'ERROR' (or NULL to disable), logging to table: [TBDD_BACKUP_DATABASES_LOG]. + -- 'INFO' includes Infos, Warnings and Errors, 'WARN' only warnings and Errors and 'ERROR' only Errors. +) +AS +BEGIN + + SET NOCOUNT ON; + + -- declare new vars because of parameter sniffing + DECLARE @COMPRESSION BIT = ISNULL(@pCOMPRESSION,0), + @LOCALBACKUPPATH NVARCHAR(255) = LTRIM(RTRIM(ISNULL(@pLOCALBACKUPPATH,''))), + @SUBDIRECTORY NVARCHAR(50) = LTRIM(RTRIM(ISNULL(@pSUBDIRECTORY,'Date_YYYYMMDD'))), + @INCLUDEDB NVARCHAR(1000) = LTRIM(RTRIM(ISNULL(@pINCLUDEDB,DB_NAME()))), + @EXCLUDEDB NVARCHAR(1000) = LTRIM(RTRIM(ISNULL(@pEXCLUDEDB,'master,model,msdb,tempdb'))), + @LOGLEVEL NVARCHAR(25) = LTRIM(RTRIM(ISNULL(@pLOGLEVEL,'ERROR'))); + + -- declare runtime vars + DECLARE @MyProcedureName NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @DBName NVARCHAR(100), + @DBNameCount INT, + @FULLLOCALBACKUPPATH NVARCHAR(255), + @ProductVersion sql_variant, + @ProductMainVersion INT, + @ProductLevel sql_variant, + @ProductEdition sql_variant, + @ProductEditionSimpleString NVARCHAR(50), + @MySessionID NVARCHAR(50) = @@SPID, + @Date_YYYYMMDD NVARCHAR(20) = CONVERT(VARCHAR(20),GETDATE(),112), + @sysconfigurations INT = 0, + @SQLCommand NVARCHAR(1000) = NULL, + @CMDCommand NVARCHAR(1000) = NULL, + @CMDCommandResult INT = 0, + @return_status NVARCHAR(50) = 0, + @return_status_text NVARCHAR(MAX) = 'START ' + @MyProcedureName + ' @ ' + CONVERT(varchar(50),GETDATE(),120); + + PRINT '===============================' + PRINT 'PROCEDURE - ' + @return_status_text; + PRINT 'PARAMETER01 - @COMPRESSION: ' + CONVERT(VARCHAR(200),@COMPRESSION); + PRINT 'PARAMETER02 - @LOCALBACKUPPATH: ' + CONVERT(VARCHAR(50),@LOCALBACKUPPATH); + PRINT 'PARAMETER03 - @SUBDIRECTORY: ' + CONVERT(VARCHAR(1),@SUBDIRECTORY); + PRINT 'PARAMETER04 - @INCLUDEDB: ' + CONVERT(VARCHAR(1000),@INCLUDEDB); + PRINT 'PARAMETER05 - @EXCLUDEDB: ' + CONVERT(VARCHAR(1000),@EXCLUDEDB); + PRINT 'PARAMETER06 - @LOGLEVEL: ' + CONVERT(VARCHAR(25),@LOGLEVEL); + + --=================================================-- Get server infos --==================================================-- + SELECT @ProductVersion = SERVERPROPERTY('productversion'), @ProductLevel = SERVERPROPERTY ('productlevel'), @ProductEdition = SERVERPROPERTY ('edition'); + SET @ProductMainVersion = ISNULL(LEFT(convert(VARCHAR(100),@ProductVersion), CHARINDEX('.', convert(VARCHAR(100),@ProductVersion)) - 1),0); + + PRINT ''; + PRINT 'Informations about this Server:'; + PRINT '@MySessionID: ' + CONVERT(VARCHAR(100),@MySessionID); + PRINT '@ProductVersion: ' + CONVERT(VARCHAR(100),@ProductVersion); + PRINT '@ProductMainVersion: ' + CONVERT(VARCHAR(100),@ProductMainVersion); + PRINT '@ProductLevel: ' + CONVERT(VARCHAR(100),@ProductLevel); + PRINT '@ProductEdition: ' + CONVERT(VARCHAR(100),@ProductEdition); + ----------------------------------------------------------------------------------------------------------------------------- + + --==============================================-- Prepare the log table --================================================-- + IF (@LOGLEVEL is not NULL) BEGIN + PRINT ''; + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + PRINT 'Log table already exists'; + END; ELSE BEGIN + PRINT 'Log table does not exists, trying to create...'; + + CREATE TABLE [dbo].[TBDD_BACKUP_DATABASES_LOG]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [LOG_LEVEL] [varchar](25) NOT NULL, + [MESSAGE1] [varchar](max) NOT NULL, + [MESSAGE2] [varchar](max) NULL, + [MESSAGE3] [varchar](max) NULL, + [MESSAGE4] [varchar](max) NULL, + [MESSAGE5] [varchar](max) NULL, + [COMMENT] [varchar](max) NULL, + [ADDED_WHO] [varchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + CONSTRAINT [PK_TBDD_BACKUP_DATABASES_LOG] PRIMARY KEY CLUSTERED + ( + [GUID] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; + + ALTER TABLE [dbo].[TBDD_BACKUP_DATABASES_LOG] ADD CONSTRAINT [DF_TBDD_BACKUP_DATABASES_LOG_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO]; + + ALTER TABLE [dbo].[TBDD_BACKUP_DATABASES_LOG] ADD CONSTRAINT [DF_TBDD_BACKUP_DATABASES_LOG_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN]; + + END; + END; ELSE BEGIN + PRINT ''; + PRINT 'Skipping Logging to log table!'; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log start to table --=================================================-- + IF ((@LOGLEVEL in ('INFO')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL,'preparing', 'procedure', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --================================================-- Check sql edition --=================================================-- + IF (CONVERT(VARCHAR(100),@ProductEdition) like '%express%') BEGIN + SET @return_status_text = 'This is an Express Version of the SQL Server, so backup COMPRESSION is not available!'; + SET @ProductEditionSimpleString = 'Express'; + END; ELSE BEGIN + SET @return_status_text = 'This is not an Express Version of the SQL Server, so backup COMPRESSION is available!'; + SET @ProductEditionSimpleString = 'Standard/Datacenter'; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log to table --====================================================-- + IF ((@LOGLEVEL in ('INFO')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL,'preparing', 'procedure', @return_status, 'Found SQL Edition: ' + @ProductEditionSimpleString, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --=============================================-- Get the dbs for the loop --==============================================-- + -- Create a temporary table to hold the table names + CREATE TABLE #DBList (DBName NVARCHAR(256)); + + IF (@ProductMainVersion >= 13) BEGIN + + IF (@INCLUDEDB is not NULL) BEGIN + INSERT INTO #DBList(DBName) + SELECT [name] as 'DBName' + FROM [master].[sys].[databases] + WHERE [name] IN (SELECT [value] FROM STRING_SPLIT(@INCLUDEDB, ',')) -- include these databases + AND [state] = 0 -- database is online + AND [is_in_standby] = 0; -- database is not read only for log shipping + END; ELSE BEGIN + INSERT INTO #DBList(DBName) + SELECT [name] as 'DBName' + FROM [master].[sys].[databases] + WHERE [name] NOT IN (SELECT [value] FROM STRING_SPLIT(@EXCLUDEDB, ',')) -- exclude these databases + AND [state] = 0 -- database is online + AND [is_in_standby] = 0; -- database is not read only for log shipping + END; + + END; ELSE BEGIN + + PRINT 'Because of the SQL Version only one DB can be processed!' + INSERT INTO #DBList(DBName) + SELECT [name] as 'DBName' + FROM [master].[sys].[databases] + WHERE [name] = @INCLUDEDB -- use only this database + AND [state] = 0 -- database is online + AND [is_in_standby] = 0; -- database is not read only for log shipping + + END; + + SELECT @DBNameCount = COUNT(*) FROM #DBList; + ----------------------------------------------------------------------------------------------------------------------------- + + SET @return_status_text = 'Found ' + convert(VARCHAR,@DBNameCount) + ' database(s) to process!'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_list', 'count', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --==========================================-- Create the main loop (cursor) --============================================-- + IF (@DBNameCount > 0) BEGIN + + IF LEN(@LOCALBACKUPPATH) > 0 and (@LOCALBACKUPPATH like '%\%') BEGIN + + --==========================================-- Checking system configuration --============================================-- + + PRINT 'Checking system configuration'; + + SELECT @sysconfigurations = SUM(CAST([value] AS INT)) + FROM [master].[sys].[configurations] + WHERE [name] in ('show advanced options','Ole Automation Procedures','xp_cmdshell'); + + If (@sysconfigurations = 3) BEGIN + + SET @return_status = 0; + SET @return_status_text = 'System configuration does fit! (' + CONVERT(varchar,@sysconfigurations) + ')'; + PRINT @return_status_text; + + END; ELSE BEGIN + + PRINT 'System configuration does NOT fit! Try to reconfigure... (' + CONVERT(varchar,@sysconfigurations) + ')'; + + EXEC sp_configure 'show advanced options', 1; + RECONFIGURE WITH OVERRIDE; + EXEC sp_configure 'Ole Automation Procedures', 1; + RECONFIGURE WITH OVERRIDE; + EXEC sp_configure 'xp_cmdshell', 1; + RECONFIGURE WITH OVERRIDE; + + -- Check again + SELECT @sysconfigurations = SUM(CAST(value AS INT)) + FROM [master].[sys].[configurations] + WHERE [name] in ('show advanced options','Ole Automation Procedures','xp_cmdshell'); + + If (@sysconfigurations = 3) BEGIN + SET @return_status = 0; + SET @return_status_text = 'System configuration does fit, now! (' + CONVERT(varchar,@sysconfigurations) + ')'; + PRINT @return_status_text; + END; ELSE BEGIN + SET @return_status = 1; + SET @return_status_text = 'System configuration does NOT fit! (' + CONVERT(varchar,@sysconfigurations) + ')'; + PRINT @return_status_text; + END; + + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'server_check', 'filesystem_config',@return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + If (@return_status = 0) BEGIN + + DECLARE db_cursor CURSOR STATIC LOCAL FOR + SELECT [DBName] as 'DBName' FROM #DBList; + + OPEN db_cursor + FETCH NEXT FROM db_cursor INTO @DBName + WHILE @@FETCH_STATUS = 0 BEGIN + BEGIN TRY + + PRINT ' '; + PRINT '-------------------------------'; + PRINT 'Now processing: ' + CONVERT(varchar(100),@DBName); + + --==============================================-- Preparing backup path --================================================-- + + -- Chekc if base path exits + SET @CMDCommand = 'IF EXIST "' + @LOCALBACKUPPATH + '" (echo 1) ELSE (echo 0)'; + + CREATE TABLE #CMDCommandResult (Output NVARCHAR(255)); + INSERT INTO #CMDCommandResult (Output) + EXEC xp_cmdshell @CMDCommand; + + SELECT @CMDCommandResult = CAST(Output AS INT) FROM #CMDCommandResult WHERE Output IS NOT NULL; + DROP TABLE #CMDCommandResult; + + IF (@CMDCommandResult = 1) BEGIN + + SET @return_status = 0; + SET @return_status_text = 'Directory (' + @LOCALBACKUPPATH + ') does exist!'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + IF (@SUBDIRECTORY like '%Date_YYYYMMDD%') BEGIN + SELECT @FULLLOCALBACKUPPATH = @LOCALBACKUPPATH + '\' + @Date_YYYYMMDD + '\'; + END; ELSE IF (LEN(@SUBDIRECTORY) >= 1) BEGIN + SELECT @FULLLOCALBACKUPPATH = @LOCALBACKUPPATH + '\' + @SUBDIRECTORY + '\'; + END; ELSE BEGIN + SELECT @FULLLOCALBACKUPPATH = @LOCALBACKUPPATH + '\'; + END; + + SET @FULLLOCALBACKUPPATH = REPLACE(@FULLLOCALBACKUPPATH,'\\','\'); + PRINT 'Final backup path set: ' + @FULLLOCALBACKUPPATH; + EXECUTE @return_status = master.dbo.xp_create_subdir @FULLLOCALBACKUPPATH; + + IF (@return_status = 0) BEGIN + SET @return_status_text = 'Creating database backup path successfully completed!'; + PRINT @return_status_text; + END; ELSE BEGIN + SET @return_status_text = 'Creating database backup path returns warnings or has failed, check the access rights!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + IF (@return_status = 0) BEGIN + + SET @FULLLOCALBACKUPPATH += @DBName + '.BAK'; + SET @return_status_text = 'Starting backup to: ' + @FULLLOCALBACKUPPATH; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + IF (@ProductEditionSimpleString = 'Express') BEGIN + SET @SQLCommand = 'BACKUP DATABASE [' + @DBName + '] TO DISK = ''' + @FULLLOCALBACKUPPATH + ''' WITH FORMAT, CHECKSUM;'; + END; ELSE BEGIN + SET @SQLCommand = 'BACKUP DATABASE [' + @DBName + '] TO DISK = ''' + @FULLLOCALBACKUPPATH + ''' WITH FORMAT, COMPRESSION, CHECKSUM;'; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @SQLCommand, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + BEGIN TRY + EXEC sp_executesql @SQLCommand; + SET @return_status = 0; + SET @return_status_text = 'Backup successful!'; + END TRY + BEGIN CATCH + + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + SET @return_status = 1; + SET @return_status_text = 'Backup failed!'; + END CATCH; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + SET @return_status_text = 'Cannot backup database because of the previous error!'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + SET @return_status = 1; + SET @return_status_text = 'Directory (' + @LOCALBACKUPPATH + ') does not exist!'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; + + END TRY + BEGIN CATCH + + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + --================================================-- Log error to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'db_cursor', @DBName, ERROR_MESSAGE(),@MyProcedureName,GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + BEGIN TRY + DROP TABLE #CMDCommandResult; + END TRY + BEGIN CATCH + PRINT '#CMDCommandResult Temp table is already gone...'; + END CATCH; + + END CATCH; + + FETCH NEXT FROM db_cursor INTO @DBName; + + END; + + CLOSE db_cursor; + DEALLOCATE db_cursor; + + END; ELSE BEGIN + + SET @return_status = 1; + SET @return_status_text = 'Cannot backup database, because of system configuration!'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'server_check', 'filesystem_config', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; + + -- Ensure temp table is droped and cursor is closed + BEGIN TRY + DROP TABLE #DBList; + END TRY + BEGIN CATCH + PRINT '#DBList Temp table is already gone...'; + END CATCH; + + BEGIN TRY + DROP TABLE #CMDCommandResult; + END TRY + BEGIN CATCH + PRINT '#CMDCommandResult Temp table is already gone...'; + END CATCH; + + END; ELSE BEGIN + + SET @return_status = 1; + SET @return_status_text = 'Invalid LOCALBACKUPPATH!'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'server_check', 'filesystem_config', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; + + END; ELSE BEGIN + + SET @return_status = 0; + SET @return_status_text = 'So there is nothing to do...'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('WARN', 'db_list', 'count', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------- + + SET @return_status_text = 'END ' + @MyProcedureName + ' @ ' + CONVERT(varchar(50),GETDATE(),120); + + --================================================-- Log end to table --===================================================-- + IF ((@LOGLEVEL in ('INFO')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_BACKUP_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_BACKUP_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'closing', 'procedure', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + PRINT ''; + PRINT 'PROCEDURE - ' + @return_status_text; + PRINT '==============================='; + + Return @return_status; + +END; +GO +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDD_MAINTAIN_DATABASES] +-- ================================================================= +-- Checks database health, shrinks all database and log files +-- and recreates indizes in a maintanance run. +-- Minimum requirement: MS SQL Server 2016 +-- +-- Returns: INT Value - 0 = Everything worked well +-- ================================================================= +-- Copyright (c) 2024 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: 29.11.2024 / MK +-- Version Date / Editor: 13.12.2024 / MK +-- Version Number: 1.1.0.1 +-- ================================================================= +-- History: +-- 29.11.2024 / MK - First Version +-- 06.12.2024 / MK - Added "SET ONLINE" after forced SINGLE_USER Mode, Added repair parameter for DBCHECK, added @pRECOMPILEPROCEDURES, some minor error fixes +-- 13.12.2024 / MK - New way the get the procedure name, failsafe for parameters implemented + +CREATE OR ALTER PROCEDURE [dbo].[PRDD_MAINTAIN_DATABASES] ( + @pCHECKDB BIT = 1, -- Set to 1 to make a check of the database before shrinking incl. soft repair function. Otherwise set to 0. + @pSHRINKLOG BIT = 1, -- Set to 1 to shrink the log file. Otherwise set to 0. + @pSHRINKDB BIT = 0, -- Set to 1 to shrink the database file as well. Otherwise set to 0. (Dont use on FILESTREAM databases!) + @pREBUILDINDEX BIT = 0, -- Set to 1 to recreate all database indexes. Otherwise set to 0. + @pRECOMPILEPROCEDURES BIT = 0, -- Set to 1 to recompile all database procedures. Otherwise set to 0. + @pCLEARQUERYCACHE BIT = 0, -- Set to 1 to clear the QL query cache via DROPCLEANBUFFERS. Otherwise set to 0. + @pFORCE BIT = 0, -- Set to 1 to force the shrinking, it will cut all current sessens. In combination with @pCHECKDB it trys the soft reapair dbs. Otherwise set to 0. + @pINCLUDEDB NVARCHAR(1000) = 'DD_ECM', -- Set a list of included databases. IF <> NULL, it will override the @pEXCLUDEDB Parameter + @pEXCLUDEDB NVARCHAR(1000) = 'master,model,msdb,tempdb', -- Set a list of exluded databases. Default exclusen are the system databases. + @pLOGLEVEL NVARCHAR(25) = 'ERROR' -- Set to 'INFO','WARN' OR 'ERROR' (or NULL to disable), logging to table: [TBDD_MAINTAIN_DATABASES_LOG] + -- 'INFO' includes Infos, Warnings and Errors, 'WARN' only warnings and Errors and 'ERROR' only Errors +) +AS +BEGIN + + SET NOCOUNT ON; + + -- declare new vars because of parameter sniffing + DECLARE @CHECKDB BIT = ISNULL(@pCHECKDB,1), + @SHRINKLOG BIT = ISNULL(@pSHRINKLOG,1), + @SHRINKDB BIT = ISNULL(@pSHRINKDB,0), + @REBUILDINDEX BIT = ISNULL(@pREBUILDINDEX,0), + @RECOMPILEPROCEDURES BIT = ISNULL(@pRECOMPILEPROCEDURES,0), + @CLEARQUERYCACHE BIT = ISNULL(@pCLEARQUERYCACHE,0), + @FORCE BIT = ISNULL(@pFORCE,0), + @INCLUDEDB NVARCHAR(1000) = LTRIM(RTRIM(ISNULL(@pINCLUDEDB,DB_NAME()))), + @EXCLUDEDB NVARCHAR(1000) = LTRIM(RTRIM(ISNULL(@pEXCLUDEDB,'master,model,msdb,tempdb'))), + @LOGLEVEL NVARCHAR(25) = LTRIM(RTRIM(ISNULL(@pLOGLEVEL,'ERROR'))); + + -- declare runtime vars + DECLARE @MyProcedureName NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ProcedureName NVARCHAR(50), + @DBName NVARCHAR(100), + @DBNameCount INT, + @LogFileName NVARCHAR(100), + @CurrentLogFileSizeMB INT, + @MinimumLogFileSizeMB INT, + @TargetLogFileSizeMB INT, + @ProductVersion sql_variant, + @ProductMainVersion INT, + @ProductLevel sql_variant, + @ProductEdition sql_variant, + @SchemaName NVARCHAR(50), + @TableName NVARCHAR(256), + @LoginName NVARCHAR(50), + @HostName NVARCHAR(50), + @SessionID NVARCHAR(50) = NULL, + @MySessionID NVARCHAR(50) = @@SPID, + @SQLCommand NVARCHAR(MAX) = NULL, + @TableListCount INT = 0, + @ProcedureListCount INT = 0, + @return_status NVARCHAR(50) = 0, + @return_status_text NVARCHAR(MAX) = 'START ' + @MyProcedureName + ' @ ' + CONVERT(varchar(50),GETDATE(),120); + + PRINT '===============================' + PRINT 'PROCEDURE - ' + @return_status_text; + PRINT 'PARAMETER01 - @CHECKDB: ' + CONVERT(VARCHAR(1),@CHECKDB); + PRINT 'PARAMETER02 - @SHRINKLOG: ' + CONVERT(VARCHAR(1),@SHRINKLOG); + PRINT 'PARAMETER03 - @SHRINKDB: ' + CONVERT(VARCHAR(1),@SHRINKDB); + PRINT 'PARAMETER04 - @REBUILDINDEX: ' + CONVERT(VARCHAR(1),@REBUILDINDEX); + PRINT 'PARAMETER05 - @RECOMPILEPROCEDURES: ' + CONVERT(VARCHAR(1),@RECOMPILEPROCEDURES); + PRINT 'PARAMETER06 - @CLEARQUERYCACHE: ' + CONVERT(VARCHAR(1),@CLEARQUERYCACHE); + PRINT 'PARAMETER07 - @FORCE: ' + CONVERT(VARCHAR(1),@FORCE); + PRINT 'PARAMETER08 - @INCLUDEDB: ' + CONVERT(VARCHAR(1000),@INCLUDEDB); + PRINT 'PARAMETER09 - @EXCLUDEDB: ' + CONVERT(VARCHAR(1000),@EXCLUDEDB); + PRINT 'PARAMETER10 - @LOGLEVEL: ' + CONVERT(VARCHAR(25),@LOGLEVEL); + + --=================================================-- Get server infos --==================================================-- + SELECT @ProductVersion = SERVERPROPERTY('productversion'), @ProductLevel = SERVERPROPERTY ('productlevel'), @ProductEdition = SERVERPROPERTY ('edition'); + SET @ProductMainVersion = ISNULL(LEFT(convert(VARCHAR(100),@ProductVersion), CHARINDEX('.', convert(VARCHAR(100),@ProductVersion)) - 1),0); + + PRINT ''; + PRINT 'Informations about this Server:'; + PRINT '@MySessionID: ' + CONVERT(VARCHAR(100),@MySessionID); + PRINT '@ProductVersion: ' + CONVERT(VARCHAR(100),@ProductVersion); + PRINT '@ProductMainVersion: ' + CONVERT(VARCHAR(100),@ProductMainVersion); + PRINT '@ProductLevel: ' + CONVERT(VARCHAR(100),@ProductLevel); + PRINT '@ProductEdition: ' + CONVERT(VARCHAR(100),@ProductEdition); + ----------------------------------------------------------------------------------------------------------------------------- + + --==============================================-- Prepare the log table --================================================-- + IF (@LOGLEVEL is not NULL) BEGIN + PRINT ''; + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + PRINT 'Log table already exists'; + END; ELSE BEGIN + PRINT 'Log table does not exists, trying to create...'; + + CREATE TABLE [dbo].[TBDD_MAINTAIN_DATABASES_LOG]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [LOG_LEVEL] [varchar](25) NOT NULL, + [MESSAGE1] [varchar](max) NOT NULL, + [MESSAGE2] [varchar](max) NULL, + [MESSAGE3] [varchar](max) NULL, + [MESSAGE4] [varchar](max) NULL, + [MESSAGE5] [varchar](max) NULL, + [COMMENT] [varchar](max) NULL, + [ADDED_WHO] [varchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + CONSTRAINT [PK_TBDD_MAINTAIN_DATABASES_LOG] PRIMARY KEY CLUSTERED + ( + [GUID] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; + + ALTER TABLE [dbo].[TBDD_MAINTAIN_DATABASES_LOG] ADD CONSTRAINT [DF_TBDD_MAINTAIN_DATABASES_LOG_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO]; + + ALTER TABLE [dbo].[TBDD_MAINTAIN_DATABASES_LOG] ADD CONSTRAINT [DF_TBDD_MAINTAIN_DATABASES_LOG_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN]; + + END; + END; ELSE BEGIN + PRINT ''; + PRINT 'Skipping Logging to log table!'; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log start to table --=================================================-- + IF ((@LOGLEVEL in ('INFO')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL,'preparing', 'procedure', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --=============================================-- Get the dbs for the loop --==============================================-- + -- Create a temporary table to hold the table names + CREATE TABLE #DBList (DBName NVARCHAR(256)); + + IF (@ProductMainVersion >= 13) BEGIN + + IF (@INCLUDEDB is not NULL) BEGIN + INSERT INTO #DBList(DBName) + SELECT [name] as 'DBName' + FROM [master].[sys].[databases] + WHERE [name] IN (SELECT [value] FROM STRING_SPLIT(@INCLUDEDB, ',')) -- include these databases + AND [state] = 0 -- database is online + AND [is_in_standby] = 0; -- database is not read only for log shipping + END; ELSE BEGIN + INSERT INTO #DBList(DBName) + SELECT [name] as 'DBName' + FROM [master].[sys].[databases] + WHERE [name] NOT IN (SELECT [value] FROM STRING_SPLIT(@EXCLUDEDB, ',')) -- exclude these databases + AND [state] = 0 -- database is online + AND [is_in_standby] = 0; -- database is not read only for log shipping + END; + + END; ELSE BEGIN + + PRINT 'Because of the SQL Version only one DB can be processed!' + INSERT INTO #DBList(DBName) + SELECT [name] as 'DBName' + FROM [master].[sys].[databases] + WHERE [name] = @INCLUDEDB -- use only this database + AND [state] = 0 -- database is online + AND [is_in_standby] = 0; -- database is not read only for log shipping + + END; + + SELECT @DBNameCount = COUNT(*) FROM #DBList; + ----------------------------------------------------------------------------------------------------------------------------- + + SET @return_status_text = 'Found ' + convert(VARCHAR,@DBNameCount) + ' database(s) to process!'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_list', 'count', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --==========================================-- Create the main loop (cursor) --============================================-- + IF (@DBNameCount > 0) BEGIN + + DECLARE db_cursor CURSOR STATIC LOCAL FOR + SELECT [DBName] as 'DBName' FROM #DBList; + + OPEN db_cursor + FETCH NEXT FROM db_cursor INTO @DBName + WHILE @@FETCH_STATUS = 0 BEGIN + BEGIN TRY + + PRINT ' '; + PRINT '-------------------------------'; + PRINT 'Now processing: ' + CONVERT(varchar(100),@DBName); + + --==============================================-- Change db working mode --===============================================-- + IF (@FORCE = 1) and (@return_status = 0) BEGIN + + PRINT 'Closing active database connections... first time'; + DECLARE kill_cursor CURSOR STATIC LOCAL FOR + SELECT CONVERT(NVARCHAR(5), [session_id]) as 'SessionID', + CONVERT(NVARCHAR(50), [login_name]) as 'LoginName', + CONVERT(NVARCHAR(50), [host_name]) as 'HostName' + FROM [master].[sys].[dm_exec_sessions] (NOLOCK) + WHERE [is_user_process] = 1 + AND [database_id] = db_id(@DBName) + AND [session_id] <> @MySessionID; + + OPEN kill_cursor; + FETCH NEXT FROM kill_cursor INTO @SessionID, @LoginName, @HostName; + WHILE @@FETCH_STATUS = 0 BEGIN + + BEGIN TRY + SET @SQLCommand = 'KILL ' + @SessionID + ';'; + PRINT 'Killing @SessionID: ' + @SessionID + ', @LoginName: ' + @LoginName + ', @HostName: ' + @HostName; + EXEC sp_executesql @SQLCommand; + SET @SQLCommand = NULL; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Closing connections to database was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Closing connections to database returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'kill_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END TRY + BEGIN CATCH + + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + SET @SQLCommand = NULL; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL is not null) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'kill_cursor', @DBName, ERROR_MESSAGE(),@MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END CATCH; + + FETCH NEXT FROM kill_cursor INTO @SessionID, @LoginName, @HostName; + + END; + + CLOSE kill_cursor; + DEALLOCATE kill_cursor; + ----------------------------------------------------------------------------------------------------------------------------- + + PRINT 'Set the database to SINGLE_USER mode to avoid multiple active sessions.'; + SET @SQLCommand = N'ALTER DATABASE [' + @DBName + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Setting the database to SINGLE_USER mode was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Setting the database to SINGLE_USER mode returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping to change the database mode (FORCE = OFF)!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Check db consistency --================================================-- + IF (@CHECKDB = 1) and (@return_status = 0) BEGIN + + IF (@FORCE = 1) BEGIN + PRINT 'Check the database for consistency and health and try soft repair.'; + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC CHECKDB ([' + @DBName + '], REPAIR_REBUILD) WITH NO_INFOMSGS, ALL_ERRORMSGS'; + END; ELSE BEGIN + PRINT 'Check the database for consistency and health.'; + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC CHECKDB ([' + @DBName + ']) WITH NO_INFOMSGS, ALL_ERRORMSGS'; + END; + + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Check the database for consistency and health was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Check the database for consistency and health returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping the database check for consistency and health!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --============================================-- Prepare shrinking the log--===============================================-- + IF (@SHRINKLOG = 1) BEGIN + + --===========================================-- Get infos about the log file --============================================-- + PRINT 'Get the current and minimum size of the log file in MB.'; + SET @SQLCommand = N'SELECT TOP 1 @LogFileName = [name], @CurrentLogFileSizeMB = ([size] / 128), @MinimumLogFileSizeMB = ([growth] * 8) + FROM [master].[sys].[master_files] + WHERE [database_id] = DB_ID(''' + @DBName + ''') AND [type_desc] = ''LOG'''; + EXEC @return_status = sp_executesql @SQLCommand, N'@LogFileName VARCHAR(100) OUTPUT, @CurrentLogFileSizeMB INT OUTPUT, @MinimumLogFileSizeMB INT OUTPUT', + @LogFileName OUTPUT, @CurrentLogFileSizeMB OUTPUT, @MinimumLogFileSizeMB OUTPUT; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Getting log file settings was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Getting log file settings returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===========================================-- Calculate target file size --==============================================-- + PRINT 'The @CurrentLogFileSizeMB is: ' + CONVERT(VARCHAR(1000),@CurrentLogFileSizeMB); + SET @TargetLogFileSizeMB = CASE WHEN @CurrentLogFileSizeMB * 0.1 < @MinimumLogFileSizeMB + THEN @MinimumLogFileSizeMB + ELSE @CurrentLogFileSizeMB * 0.1 + END; + + PRINT 'The @TargetLogFileSizeMB is: ' + CONVERT(VARCHAR(1000),@TargetLogFileSizeMB); + ----------------------------------------------------------------------------------------------------------------------------- + + --=================================================-- Schrink db logs --===================================================-- + IF (@CurrentLogFileSizeMB > @TargetLogFileSizeMB) BEGIN + + --=============================================-- Change db recovery mode --===============================================-- + PRINT 'Truncating the log needs to change the database recovery model to SIMPLE.'; + SET @SQLCommand = N'ALTER DATABASE [' + @DBName + '] SET RECOVERY SIMPLE'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Setting database to the simple recovery model was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Setting database to the simple recovery model returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Now, do it! --=====================================================-- + IF (@return_status = 0) BEGIN + PRINT 'Shrink the truncated log file to 10% of its current size or the minimum size, whichever is larger.'; + IF (@ProductMainVersion >= 16) BEGIN + IF (@FORCE = 1) BEGIN + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC SHRINKFILE (''' + @LogFileName + ''', ' + CAST(@TargetLogFileSizeMB AS VARCHAR) + ') WITH WAIT_AT_LOW_PRIORITY (ABORT_AFTER_WAIT = BLOCKERS), NO_INFOMSGS;'; + END; ELSE BEGIN + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC SHRINKFILE (''' + @LogFileName + ''', ' + CAST(@TargetLogFileSizeMB AS VARCHAR) + ') WITH WAIT_AT_LOW_PRIORITY (ABORT_AFTER_WAIT = SELF), NO_INFOMSGS;'; + END; + END; ELSE BEGIN + PRINT 'Because of the sql server version, DBCC SHRINKFILE is not applicable with the FORCE parameter!'; + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC SHRINKFILE (''' + @LogFileName + ''', ' + CAST(@TargetLogFileSizeMB AS VARCHAR) + ') WITH NO_INFOMSGS;'; + END; + + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Shrinking the database log file was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Shrinking the database log file returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + END; ELSE BEGIN + SET @return_status_text = 'Shrinking the database log was skipped because of previouse error(s)!'; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --=============================================-- Change db recovery mode --===============================================-- + PRINT 'Reset the database recovery model.' + SET @SQLCommand = N'ALTER DATABASE [' + @DBName + '] SET RECOVERY FULL'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Setting database back to the full recovery model was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Setting database back to the full recovery model returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + PRINT 'No shrink action neccessary!'; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + PRINT 'Skipping to shrink the log file!'; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --================================================-- Shrink db as well --==================================================-- + IF ((@SHRINKDB = 1) and (@return_status = 0)) BEGIN + PRINT 'Shrink the database to reclaim unused space.'; + IF (@ProductMainVersion >= 16) BEGIN + IF (@FORCE = 1) BEGIN + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC SHRINKDATABASE ([' + @DBName + ']) WITH WAIT_AT_LOW_PRIORITY (ABORT_AFTER_WAIT = BLOCKERS), NO_INFOMSGS;'; + END; ELSE BEGIN + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC SHRINKDATABASE ([' + @DBName + ']) WITH WAIT_AT_LOW_PRIORITY (ABORT_AFTER_WAIT = SELF), NO_INFOMSGS;'; + END; + END; ELSE BEGIN + PRINT 'Because of the sql server version, DBCC SHRINKDATABASE is not applicable with the FORCE parameter!'; + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC SHRINKDATABASE ([' + @DBName + ']) WITH NO_INFOMSGS;'; + END; + + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Shrinking the database was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Shrinking the database returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping shrinking the database!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --=============================================-- Rebuild database indexes --==============================================-- + IF ((@REBUILDINDEX = 1) and (@return_status = 0)) BEGIN + PRINT 'Prepare to rebuild database indexes.'; + + BEGIN TRY + DROP TABLE #TableList; + END TRY + BEGIN CATCH + PRINT '#TableList Temp table is already gone... (1)'; + END CATCH; + + -- Create a temporary table to hold the table names + CREATE TABLE #TableList (SchemaName NVARCHAR(50), TableName NVARCHAR(256)); + + -- Set the context to the specified database and fill the temporary table + SET @SQLCommand = ' INSERT INTO #TableList (SchemaName, TableName) + SELECT DISTINCT (SCHEMA_NAME([schema_id])), t.[name] + FROM [' + @DBName + '].[sys].[tables] t + INNER JOIN [' + @DBName + '].[sys].[indexes] i ON t.[object_id] = i.[object_id] + WHERE i.[type] IN (1, 2) -- Clustered and Non-Clustered indexes;'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Getting the tables was successfully done!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Getting the tables returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + IF (@return_status = 0) BEGIN + SELECT @TableListCount = COUNT(*) FROM #TableList; + PRINT 'Found: ' + convert(VARCHAR,@TableListCount) + ' tables to reindex'; + END; ELSE BEGIN + SET @TableListCount = 0; + PRINT 'Found: no tables to reindex'; + END; + + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping rebuilding database indexes!'; + PRINT @return_status_text; + END; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + IF ((@REBUILDINDEX = 1) and (@return_status = 0) and (@TableListCount > 0)) BEGIN + + DECLARE table_cursor CURSOR STATIC LOCAL FOR + SELECT SchemaName, TableName FROM #TableList; + + OPEN table_cursor; + FETCH NEXT FROM table_cursor INTO @SchemaName, @TableName; + WHILE @@FETCH_STATUS = 0 BEGIN + BEGIN TRY + + PRINT 'Rebuild Index for table: ' + CONVERT(VARCHAR(1000),@TableName); + SET @SQLCommand = 'ALTER INDEX ALL ON [' + @DBName + '].[' + @SchemaName + '].[' + @TableName + '] ' + + 'REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON)'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Recreation the database indexes of Table [' + @TableName + '] successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Recreation the database indexes of Table [' + @TableName + '] returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'table_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + -- Short break to avoid access violations + WAITFOR DELAY '00:00:03'; + + ----------------------------------------------------------------------------------------------------------------------------- + PRINT 'Closing active database connections... again'; + DECLARE kill_cursor CURSOR STATIC LOCAL FOR + SELECT CONVERT(NVARCHAR(5), [session_id]) as 'SessionID', + CONVERT(NVARCHAR(50), [login_name]) as 'LoginName', + CONVERT(NVARCHAR(50), [host_name]) as 'HostName' + FROM [master].[sys].[dm_exec_sessions] (NOLOCK) + WHERE [is_user_process] = 1 + AND [database_id] = db_id(@DBName) + AND [session_id] <> @MySessionID; + + OPEN kill_cursor; + FETCH NEXT FROM kill_cursor INTO @SessionID, @LoginName, @HostName; + WHILE @@FETCH_STATUS = 0 BEGIN + + BEGIN TRY + + SET @SQLCommand = 'KILL ' + @SessionID + ';'; + PRINT 'Killing @SessionID: ' + @SessionID + ', @LoginName: ' + @LoginName + ', @HostName: ' + @HostName; + EXEC sp_executesql @SQLCommand; + SET @SQLCommand = NULL; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Closing connections to database was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Closing connections to database returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'kill_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END TRY + BEGIN CATCH + + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + SET @SQLCommand = NULL; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL is not null) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'kill_cursor', @DBName, ERROR_MESSAGE(),@MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END CATCH; + + FETCH NEXT FROM kill_cursor INTO @SessionID, @LoginName, @HostName; + + END; + + CLOSE kill_cursor; + DEALLOCATE kill_cursor; + ----------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM table_cursor INTO @SchemaName, @TableName; + + END TRY + BEGIN CATCH + + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + --================================================-- Log error to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'table_cursor', @DBName, ERROR_MESSAGE(),@MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM table_cursor INTO @SchemaName, @TableName; + + END CATCH; + + END; + + CLOSE table_cursor; + DEALLOCATE table_cursor; + + -- Drop the temporary table + DROP TABLE #TableList; + + SET @return_status_text = 'Recreation of the database indexes successfully completed!'; + PRINT @return_status_text; + + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping the recreation of the database indexes!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --=========================================-- Prepare to recompile Procedures --===========================================-- + IF ((@RECOMPILEPROCEDURES = 1) and (@return_status = 0)) BEGIN + PRINT 'Prepare to recompile database procedures.'; + + BEGIN TRY + DROP TABLE #ProcedureList; + END TRY + BEGIN CATCH + PRINT '#ProcedureList Temp table is already gone... (1)'; + END CATCH; + + -- Create a temporary table to hold the procedure names + CREATE TABLE #ProcedureList (SchemaName NVARCHAR(50), ProcedureName NVARCHAR(256)); + + -- Set the context to the specified database and fill the temporary table + SET @SQLCommand = ' INSERT INTO #ProcedureList (SchemaName, ProcedureName) + SELECT SPECIFIC_CATALOG, SPECIFIC_NAME + FROM [' + @DBName + '].INFORMATION_SCHEMA.ROUTINES (NOLOCK) + WHERE ROUTINE_TYPE = ''PROCEDURE'' + AND SPECIFIC_NAME <> ''' + @MyProcedureName + ''' + ORDER BY SPECIFIC_NAME;'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Getting the procedures was successfully done!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Getting the procedures returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + IF (@return_status = 0) BEGIN + SELECT @ProcedureListCount = COUNT(*) FROM #ProcedureList; + PRINT 'Found: ' + convert(VARCHAR,@ProcedureListCount) + ' procedures to recompile'; + END; ELSE BEGIN + SET @ProcedureListCount = 0; + PRINT 'Found: no procedures to recompile'; + END; + + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping recompiling procedures!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Recompile Procedures --================================================-- + IF ((@RECOMPILEPROCEDURES = 1) and (@return_status = 0) and (@ProcedureListCount > 0)) BEGIN + + PRINT 'Removing all procedure elements from the query plan cache.'; + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC FREEPROCCACHE;'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Removing all procedure elements was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Removing all procedure elements returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'procedure_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + DECLARE procedure_cursor CURSOR STATIC LOCAL FOR + SELECT SchemaName, ProcedureName FROM #ProcedureList; + + OPEN procedure_cursor; + FETCH NEXT FROM procedure_cursor INTO @SchemaName, @ProcedureName; + WHILE @@FETCH_STATUS = 0 BEGIN + BEGIN TRY + + PRINT 'Recompile procedure: ' + CONVERT(VARCHAR(1000),@ProcedureName); + SET @SQLCommand = 'USE [' + @DBName + ']; EXEC sp_recompile ''' + @ProcedureName + '''; '; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Recompiling the procedure [' + @ProcedureName + '] successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Recompiling the procedure [' + @ProcedureName + '] returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'procedure_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM procedure_cursor INTO @SchemaName, @ProcedureName; + + END TRY + BEGIN CATCH + + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + --================================================-- Log error to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'procedure_cursor', @DBName, ERROR_MESSAGE(),@MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM procedure_cursor INTO @SchemaName, @ProcedureName; + + END CATCH; + + END; + + CLOSE procedure_cursor; + DEALLOCATE procedure_cursor; + + -- Drop the temporary table + DROP TABLE #ProcedureList; + + SET @return_status_text = 'Recompiling of procedures successfully completed!'; + PRINT @return_status_text; + + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping the recompiling of the procedures!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'procedure_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --================================================-- Clear Query Cache --==================================================-- + + IF ((@CLEARQUERYCACHE = 1) and (@return_status = 0)) BEGIN + + PRINT 'Removing the sql query cache.'; + SET @SQLCommand = N'USE [' + @DBName + ']; DBCC DROPCLEANBUFFERS;'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Removing sql query cache was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Removing sql query cache returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping the query cache clearing!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --==============================================-- Change db working mode --===============================================-- + IF (@FORCE = 1) BEGIN -- and ignore last result + PRINT 'Set the database back to MULTI_USER mode'; + SET @SQLCommand = N'ALTER DATABASE [' + @DBName + '] SET MULTI_USER; ALTER DATABASE [' + @DBName + '] SET ONLINE;'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Setting the database to MULTI_USER mode was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Setting the database to MULTI_USER mode returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping to change the database mode (FORCE = OFF)!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + -- Ensure temp table is droped and cursor is closed + BEGIN TRY + DROP TABLE #DBList; + END TRY + BEGIN CATCH + PRINT '#DBList Temp table are already gone...'; + END CATCH; + + IF (@REBUILDINDEX = 1) BEGIN + + BEGIN TRY + DROP TABLE #TableList; + END TRY + BEGIN CATCH + PRINT '#TableList Temp table are already gone...(1)'; + END CATCH; + + END; + + IF (@RECOMPILEPROCEDURES = 1) BEGIN + + BEGIN TRY + DROP TABLE #ProcedureList; + END TRY + BEGIN CATCH + PRINT '#ProcedureList Temp table are already gone...(1)'; + END CATCH; + + BEGIN TRY + CLOSE procedure_cursor; + DEALLOCATE procedure_cursor; + END TRY + BEGIN CATCH + PRINT 'Procedure cursor is already closed and deallocated...(1)'; + END CATCH; + + END; + + PRINT '-------------------------------'; + + END TRY + BEGIN CATCH + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + --================================================-- Log error to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', 'db_cursor', @DBName, ERROR_MESSAGE(),@MyProcedureName,GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --==============================================-- Change db working mode --===============================================-- + -- Ensure the database is set back to MULTI_USER mode in case of errors. + --==============================================-- Change db working mode --===============================================-- + IF (@FORCE = 1) BEGIN -- and ignore last result + PRINT 'Set the database back to MULTI_USER mode'; + SET @SQLCommand = N'ALTER DATABASE [' + @DBName + '] SET MULTI_USER; ALTER DATABASE [' + @DBName + '] SET ONLINE;'; + EXEC @return_status = sp_executesql @SQLCommand; + + IF ((@LOGLEVEL in ('INFO')) and (@return_status = 0)) BEGIN + SET @return_status_text = 'Setting the database to MULTI_USER mode was successfully completed!'; + PRINT @return_status_text; + END; ELSE IF ((@LOGLEVEL in ('WARN')) and (@return_status <> 0)) BEGIN + SET @return_status_text = 'Setting the database to MULTI_USER mode returns warnings or has failed, check the ID!'; + PRINT @return_status_text; + END; + END; ELSE BEGIN + IF (@LOGLEVEL in ('INFO')) BEGIN + SET @return_status_text = 'Skipping to change the database mode (FORCE = OFF)!'; + PRINT @return_status_text; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Log start to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'db_cursor', @DBName, @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --=====================================================-- Clean up --======================================================-- + -- Ensure temp table is droped and cursor is closed + BEGIN TRY + DROP TABLE #DBList; + END TRY + BEGIN CATCH + PRINT '#DBList Temp table are already gone...'; + END CATCH; + + IF (@REBUILDINDEX = 1) BEGIN + + BEGIN TRY + DROP TABLE #TableList; + END TRY + BEGIN CATCH + PRINT '#TableList Temp table are already gone...(2)'; + END CATCH; + + BEGIN TRY + CLOSE table_cursor; + DEALLOCATE table_cursor; + END TRY + BEGIN CATCH + PRINT 'Table cursor is already closed and deallocated...(2)'; + END CATCH; + + END; + + IF (@RECOMPILEPROCEDURES = 1) BEGIN + + BEGIN TRY + DROP TABLE #ProcedureList; + END TRY + BEGIN CATCH + PRINT '#ProcedureList Temp table are already gone...(2)'; + END CATCH; + + BEGIN TRY + CLOSE procedure_cursor; + DEALLOCATE procedure_cursor; + END TRY + BEGIN CATCH + PRINT 'Procedure cursor is already closed and deallocated...(2)'; + END CATCH; + + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END CATCH; + + FETCH NEXT FROM db_cursor INTO @DBName; + + END; + + CLOSE db_cursor; + DEALLOCATE db_cursor; + + END; ELSE BEGIN + + SET @return_status = 0; + SET @return_status_text = 'So there is nothing to do...'; + PRINT @return_status_text; + + --===============================================-- Log result to table --=================================================-- + IF ((@LOGLEVEL in ('INFO','WARN','ERROR')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('WARN', 'db_list', 'count', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------- + + SET @return_status_text = 'END [PRDD_MAINTAIN_DATABASES] @ ' + CONVERT(varchar(50),GETDATE(),120); + + --================================================-- Log end to table --===================================================-- + IF ((@LOGLEVEL in ('INFO')) and (@return_status is not null) and (@return_status_text is not null)) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_MAINTAIN_DATABASES_LOG') BEGIN + INSERT INTO [TBDD_MAINTAIN_DATABASES_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, 'closing', 'procedure', @return_status, @return_status_text, @MyProcedureName, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + PRINT ''; + PRINT 'PROCEDURE - ' + @return_status_text; + PRINT '==============================='; + + Return @return_status; + +END; +GO +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDD_SET_STATUS_IN_THIRDPARTY_DB] +-- ================================================================= +-- Set status info into a text field +-- +-- Returns: 1 = SUCCESS; 0 = FAILED +-- ================================================================= +-- Copyright (c) 2024 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: 25.11.2024 / HE,MK +-- Version Date / Editor: 14.12.2024 / HE,MK +-- Version Number: 1.1.0.0 +-- ================================================================= +-- History: +-- 25.11.2024 / HE,MK - First Version +-- 14.12.2024 / MK - @MyProcedureName variable implemented, Failsafe for parameters implemented + +CREATE OR ALTER PROCEDURE [PRDD_SET_STATUS_IN_THIRDPARTY_DB]( + @pTARGET_DB NVARCHAR(256) = '[DD_CWLDATEN_DDVP]', -- Give target DB name (without schema!) + @pTARGET_SCHEMA NVARCHAR(256) = '[dbo]', -- Give target DB schema + @pTARGET_TABLE NVARCHAR(256) = '[t025]', -- Give target DB table + @pTARGET_COLUMN NVARCHAR(256) = '[c069]', -- Give target DB column + @pTARGET_COLUMN_TYPE NVARCHAR(256) = 'NVARCHAR', -- Give target DB column type eg. INT or NVARCHAR + @pREF_DOC_TYPE NVARCHAR(256) = 'Ausgangsrechnung', -- Give REF_DOC_TYPE, eg.: Ausgangsangebot, Ausgangsauftrag, Ausgangslieferschein, Ausgangsrechnung (ONLY FOR LOGGING PURPOSE!) + @pREF_DOC_NR_COLUMN NVARCHAR(256) = '[c055]', -- Give the column where the REF_DOC_NR is stored (eg. WINLINE: Ausgangsangebot=[c043], Ausgangsauftrag=[c044], Ausgangslieferschein=[c045], Ausgangsrechnung=[c055]) + @pREF_DOC_NR NVARCHAR(256), -- Give REF_DOC_NR, like 'ARE-20234187' or 'AANG-20241060' + @pADDITIONAL_WHERE NVARCHAR(256) = '', -- Give an additional WHERE clause like ' AND [COLUMN] IS NOT NULL' + @pSTATUS_VALUE NVARCHAR(256), -- Give text to write in @pTARGET_COLUMN + @pSTATUS_VALUE_MAX_LEN INT = 60, -- Give the max lenght of the target field for the status text + @pSTATUS_VALUE_DELIMITER NVARCHAR(3) = '; ', -- Give the separator to concat multiple status values, like "Text1; Text2; ..." + @pUSERNAME NVARCHAR(50), -- Give the user of the Frontend call, for the logging + @pOVERWRITE BIT = 0, -- Set overwrite for @pTARGET_COLUMN: 0 = concat; 1 = overwrite + @pLOGLEVEL NVARCHAR(25) = 'ERROR' -- Set Loglevel (ERROR or INFO) to be written to table [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] +) +AS +BEGIN TRY + + SET NOCOUNT ON; + + -- decalare new vars because of parameter sniffing + DECLARE @TARGET_DB NVARCHAR(256) = ISNULL(@pTARGET_DB,''), + @TARGET_SCHEMA NVARCHAR(256) = ISNULL(@pTARGET_SCHEMA,''), + @TARGET_TABLE NVARCHAR(256) = ISNULL(@pTARGET_TABLE,''), + @TARGET_COLUMN NVARCHAR(256) = ISNULL(@pTARGET_COLUMN,''), + @TARGET_COLUMN_TYPE NVARCHAR(256) = ISNULL(@pTARGET_COLUMN_TYPE,'NVARCHAR'), + @REF_DOC_TYPE NVARCHAR(256) = ISNULL(@pREF_DOC_TYPE,''), + @REF_DOC_NR_COLUMN NVARCHAR(256) = ISNULL(@pREF_DOC_NR_COLUMN,''), + @REF_DOC_NR NVARCHAR(256) = ISNULL(@pREF_DOC_NR,''), + @ADDITIONAL_WHERE NVARCHAR(256) = ISNULL(@pADDITIONAL_WHERE,''), + @STATUS_VALUE NVARCHAR(256) = ISNULL(@pSTATUS_VALUE,''), + @STATUS_VALUE_MAX_LEN INT = ISNULL(@pSTATUS_VALUE_MAX_LEN,60), + @STATUS_VALUE_DELIMITER NVARCHAR(3) = ISNULL(@pSTATUS_VALUE_DELIMITER,'; '), + @USERNAME NVARCHAR(50) = ISNULL(@pUSERNAME,LEFT(OBJECT_NAME(@@PROCID),50)), + @OVERWRITE BIT = ISNULL(@pOVERWRITE,0), + @LOGLEVEL NVARCHAR(25) = ISNULL(@pLOGLEVEL,'ERROR'); + + -- decalare runtime vars + DECLARE @MyProcedureName NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @LINE_COUNT_1 INT = 0, + @LINE_COUNT_2 INT = 0, + @SQL_COMMAND NVARCHAR(2000) = NULL, + @STATUS_VALUE_OLD NVARCHAR(256) = NULL, + @RETURN_STATUS NVARCHAR(256) = NULL, + @RETURN_STATUS_VALUE NVARCHAR(256) = 'START ' + @MyProcedureName + ' @ ' + CONVERT(varchar(50),GETDATE(),120); + + PRINT '===============================' + PRINT 'PROCEDURE - ' + @RETURN_STATUS_VALUE; + PRINT 'PARAMETER01 - @TARGET_DB: ' + CONVERT(NVARCHAR(256),@TARGET_DB); + PRINT 'PARAMETER02 - @TARGET_SCHEMA: ' + CONVERT(NVARCHAR(256),@TARGET_SCHEMA); + PRINT 'PARAMETER03 - @TARGET_TABLE: ' + CONVERT(NVARCHAR(256),@TARGET_TABLE); + PRINT 'PARAMETER04 - @TARGET_COLUMN: ' + CONVERT(NVARCHAR(256),@TARGET_COLUMN); + PRINT 'PARAMETER05 - @TARGET_COLUMN_TYPE: ' + CONVERT(NVARCHAR(256),@TARGET_COLUMN_TYPE); + PRINT 'PARAMETER06 - @REF_DOC_TYPE: ' + CONVERT(NVARCHAR(256),@REF_DOC_TYPE); + PRINT 'PARAMETER07 - @REF_DOC_NR_COLUMN ' + CONVERT(NVARCHAR(256),@REF_DOC_NR_COLUMN); + PRINT 'PARAMETER08 - @REF_DOC_NR: ' + CONVERT(NVARCHAR(256),@REF_DOC_NR); + PRINT 'PARAMETER09 - @ADDITIONAL_WHERE ' + CONVERT(NVARCHAR(256),@ADDITIONAL_WHERE); + PRINT 'PARAMETER10 - @STATUS_VALUE: ' + CONVERT(NVARCHAR(256),@STATUS_VALUE); + PRINT 'PARAMETER11 - @STATUS_VALUE_MAX_LEN ' + CONVERT(NVARCHAR(256),@STATUS_VALUE_MAX_LEN); + PRINT 'PARAMETER12 - @STATUS_VALUE_DELIMITER ' + CONVERT(NVARCHAR(3),@STATUS_VALUE_DELIMITER); + PRINT 'PARAMETER13 - @USERNAME: ' + CONVERT(NVARCHAR(50),@USERNAME); + PRINT 'PARAMETER14 - @OVERWRITE: ' + CONVERT(NVARCHAR(1),@OVERWRITE); + PRINT 'PARAMETER15 - @LOGLEVEL: ' + CONVERT(NVARCHAR(25),@LOGLEVEL); + + --==============================================-- Prepare the log table --================================================-- + IF (@LOGLEVEL is not NULL) BEGIN + PRINT ''; + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN + PRINT 'Log table already exists'; + + END; ELSE BEGIN + PRINT 'Log table does not exists, trying to create...'; + + CREATE TABLE [dbo].[TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [LOG_LEVEL] [NVARCHAR](25) NOT NULL, + [MESSAGE1] [NVARCHAR](max) NOT NULL, + [MESSAGE2] [NVARCHAR](max) NULL, + [MESSAGE3] [NVARCHAR](max) NULL, + [MESSAGE4] [NVARCHAR](max) NULL, + [MESSAGE5] [NVARCHAR](max) NULL, + [COMMENT] [NVARCHAR](max) NULL, + [ADDED_WHO] [NVARCHAR](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + CONSTRAINT [PK_TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] PRIMARY KEY CLUSTERED + ( + [GUID] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] + ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]; + + ALTER TABLE [dbo].[TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] ADD CONSTRAINT [DF_TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO]; + + ALTER TABLE [dbo].[TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] ADD CONSTRAINT [DF_TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN]; + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + --=====================================================-- main part --=====================================================-- + PRINT 'Check if there is a valid target...' + SET @SQL_COMMAND = N'SELECT @LINE_COUNT_1 = count(*) + FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' + WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' ' + @ADDITIONAL_WHERE; + PRINT 'Build Query @SQL_COMMAND: ' + @SQL_COMMAND; + EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@LINE_COUNT_1 INT OUTPUT', @LINE_COUNT_1 OUTPUT; + + IF (@RETURN_STATUS = 0) BEGIN + IF (@LINE_COUNT_1 > 0) BEGIN + PRINT 'Found: ' + CONVERT(NVARCHAR(25),@LINE_COUNT_1) + ' docs to update!'; + PRINT 'Checking if docs have a existing "status text"'; + SET @SQL_COMMAND = N'SELECT @LINE_COUNT_2 = count(*) + FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' + WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' + AND (' + @TARGET_COLUMN + ' = ''' + @STATUS_VALUE + ''' + OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_VALUE + ''' + OR ' + @TARGET_COLUMN + ' LIKE ''' + @STATUS_VALUE + '%'' + OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_VALUE + '%'') ' + + @ADDITIONAL_WHERE; + PRINT 'Build "status text" Query @SQL_COMMAND: ' + @SQL_COMMAND; + EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@LINE_COUNT_2 INT OUTPUT', @LINE_COUNT_2 OUTPUT; + + IF (@RETURN_STATUS = 0) BEGIN + PRINT 'Query was successful!'; + PRINT 'Found: ' + CONVERT(NVARCHAR(25),@LINE_COUNT_2) + ' docs with the status text duplicate!'; + + IF (@LINE_COUNT_2 > 0) BEGIN + PRINT 'Given status text is already there, no update needed!'; + SET @RETURN_STATUS = 1; + + END; ELSE BEGIN + PRINT 'Given status text is not there, update needed!'; + + IF ((@OVERWRITE = 0) and (@LINE_COUNT_1 > 0)) BEGIN + SET @SQL_COMMAND = N'SELECT TOP 1 @STATUS_VALUE_OLD = ' + @TARGET_COLUMN + ' + FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' + WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' + AND ' + @TARGET_COLUMN + ' IS NOT NULL + AND ' + @TARGET_COLUMN + ' <> '''' ' + + @ADDITIONAL_WHERE; + PRINT 'Build "status text" Query for existing values @SQL_COMMAND: ' + @SQL_COMMAND; + PRINT 'Found: ' + CONVERT(NVARCHAR(25),@LINE_COUNT_1) + ' docs with a existing status text!'; + EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@STATUS_VALUE_OLD NVARCHAR(256) OUTPUT', @STATUS_VALUE_OLD OUTPUT; + + IF ((@RETURN_STATUS = 0)) BEGIN + PRINT 'Query was successful!'; + + IF (@STATUS_VALUE_OLD <> @STATUS_VALUE) BEGIN + PRINT 'Extending status text'; + SET @STATUS_VALUE = concat(@STATUS_VALUE_OLD,@STATUS_VALUE_DELIMITER,@STATUS_VALUE); + END; + + SET @STATUS_VALUE = CASE WHEN LEFT(@STATUS_VALUE,2) = @STATUS_VALUE_DELIMITER + THEN SUBSTRING(@STATUS_VALUE, 2, LEN(@STATUS_VALUE)-2) + ELSE @STATUS_VALUE + END; + END; ELSE BEGIN + PRINT 'Query has failed!'; + PRINT '@STATUS_VALUE keeps untouched!'; + END; + + END; ELSE IF ((@OVERWRITE = 1) or (@LINE_COUNT_1 = 0)) BEGIN + PRINT 'Overwrite is enabled and or no doc with existing status text found!'; + END; + + --===========================================-- data collected updating row --=============================================-- + + -- Check STATUS TEXT for its lenght + SET @STATUS_VALUE = LTRIM(RTRIM(convert(NVARCHAR(MAX),@STATUS_VALUE))) + IF (LEN(@STATUS_VALUE) > @STATUS_VALUE_MAX_LEN) BEGIN + SET @STATUS_VALUE = LEFT(@STATUS_VALUE,@STATUS_VALUE_MAX_LEN); + END; + + SET @SQL_COMMAND = N'SET NOCOUNT ON; UPDATE ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' '; + + IF (@TARGET_COLUMN_TYPE LIKE '%INT%') BEGIN + SET @STATUS_VALUE = convert(INT,@STATUS_VALUE); + SET @SQL_COMMAND += ' SET ' + @TARGET_COLUMN + ' = ' + @STATUS_VALUE; + END; ELSE BEGIN + -- NVARCHAR is always the failsafe + SET @SQL_COMMAND += ' SET ' + @TARGET_COLUMN + ' = ''' + @STATUS_VALUE + ''''; + END; + + SET @SQL_COMMAND += ' WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' ' + @ADDITIONAL_WHERE; + PRINT 'Build Update @SQL_COMMAND: ' + @SQL_COMMAND; + EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND; + + IF (@RETURN_STATUS = 0) BEGIN + PRINT 'Update was successful!'; + SET @RETURN_STATUS = 1; + END; ELSE BEGIN + PRINT 'Update has failed!'; + PRINT '@RETURN_STATUS: ' + CONVERT(NVARCHAR(50),@RETURN_STATUS); + END; + ----------------------------------------------------------------------------------------------------------------------------- + END; + + END; ELSE BEGIN + PRINT 'Query has failed!'; + SET @RETURN_STATUS = 0; + END; + + END; ELSE BEGIN + PRINT 'No doc were found!'; + SET @RETURN_STATUS = 0; + END; + + END; ELSE BEGIN + PRINT 'Error at dynamic SQL!'; + SET @RETURN_STATUS = 0; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + IF (@RETURN_STATUS = 1) BEGIN + SET @RETURN_STATUS_VALUE = 'SUCCESS'; + END; ELSE BEGIN + SET @RETURN_STATUS_VALUE = 'FAILED'; + END; + + PRINT ''; + PRINT 'PROCEDURE Result: ' + @RETURN_STATUS_VALUE; + PRINT 'PROCEDURE - END ' + @MyProcedureName + ' @ ' + CONVERT(NVARCHAR(50),GETDATE(),120); + PRINT '==============================='; + + --==============================================-- Log result to table --===============================================-- + + IF (@LOGLEVEL in ('INFO','WARN')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN + INSERT INTO [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [MESSAGE5], [ADDED_WHO], [ADDED_WHEN]) + VALUES (@LOGLEVEL, concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_VALUE, 'OVERWRITE = ' + convert(varchar,@OVERWRITE), @RETURN_STATUS_VALUE, @USERNAME ,GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; -- Because of the target index in windream! + +END TRY +BEGIN CATCH + + -- Handle any errors that occur during the process. + SELECT ERROR_MESSAGE() AS ErrorMessage; + + --================================================-- Log error to table --=================================================-- + IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN + IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN + INSERT INTO [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [MESSAGE5], [ADDED_WHO], [ADDED_WHEN]) + VALUES ('ERROR', concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_VALUE, 'OVERWRITE = ' + convert(NVARCHAR,@OVERWRITE), ERROR_MESSAGE(), @USERNAME, GetDate()); + END; + END; + ----------------------------------------------------------------------------------------------------------------------------- + + PRINT ''; + PRINT 'PROCEDURE Result: ERROR! ' + ERROR_MESSAGE(); + PRINT 'PROCEDURE - END ' + @MyProcedureName + ' @ ' + CONVERT(varchar(50),GETDATE(),120); + PRINT '==============================='; + + RETURN 0; -- Because of the target index in windream! + +END CATCH; +GO diff --git a/00_DB_SETUP_SINGLE/01_IDB/CreateDBObjects.sql b/00_DB_SETUP_SINGLE/01_IDB/CreateDBObjects.sql index 0be3af9..4aa9d0c 100644 --- a/00_DB_SETUP_SINGLE/01_IDB/CreateDBObjects.sql +++ b/00_DB_SETUP_SINGLE/01_IDB/CreateDBObjects.sql @@ -1,3 +1,9 @@ +------------------------------------------------ +-----ATTENTION BEFORE RUNNING THIS SCRIPT ------ +------------------------------------------------ +--REPLACE THE TERM @MY_DD_ECM_DB WIHT THE ACTUAL NAME OF +--THE DD_ECM Database +------------------------------------------------ --REPLACE @MY_DD_ECM_DB WITH REAL_DBNAME USE IDB GO @@ -130,7 +136,7 @@ GO --INSERT INTO [TBIDB_CATALOG] ([CAT_TITLE],[CAT_STRING]) VALUES ('APPSERV1','172.24.12.39') --GO INSERT INTO TBIDB_CATALOG (CAT_TITLE,CAT_STRING) VALUES ('GHOST_SELECT',' -SELECT T.USERNAME,T.NAME, T.[PRENAME],T.EMAIL FROM @MY_DD_ECM_DB.dbo.TBDD_USER T ORDER BY USERNAME') +SELECT T.USERNAME,T.NAME, T.[PRENAME],T.EMAIL FROM DD_ECM.dbo.TBDD_USER T ORDER BY USERNAME') GO INSERT INTO TBIDB_CATALOG (CAT_TITLE,CAT_STRING) VALUES ('AD_GROUP_ADMIN1','NONE') GO @@ -1281,36 +1287,6 @@ AS FROM INSERTED WHERE TBIDB_STATES.GUID = INSERTED.GUID GO - ---DROP TABLE TBIDB_CONVERSATION_MESSAGE ---DROP TABLE TBIDB_CONVERSATION_USER ---DROP TABLE TBIDB_CONVERSATION_OBJECT - -CREATE TABLE TBIDB_CONVERSATION_OBJECT -( - GUID BIGINT NOT NULL IDENTITY (1, 1), - TITLE_TERM_ID BIGINT NOT NULL, - IDB_OBJ_ID BIGINT NOT NULL, - ADDED_WHO BIGINT, - ADDED_WHEN DATETIME NOT NULL DEFAULT GETDATE(), - CHANGED_WHO BIGINT, - CHANGED_WHEN DATETIME, - CONSTRAINT PK_TBIDB_CONVERSATION_OBJECT PRIMARY KEY (GUID), - CONSTRAINT FK_TBIDB_CONVERSATION_OBJECT_IDB_OBJ_ID FOREIGN KEY (IDB_OBJ_ID) REFERENCES TBIDB_OBJECT (IDB_OBJ_ID), - CONSTRAINT FK_TBIDB_CONVERSATION_OBJECT_ADDED_WHO_T_ID FOREIGN KEY (ADDED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID), - CONSTRAINT FK_TBIDB_CONVERSATION_OBJECT_CHANGED_WHO_T_ID FOREIGN KEY (CHANGED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID),) -GO -CREATE TRIGGER TBIDB_CONVERSATION_OBJECT_AFT_UPD ON TBIDB_CONVERSATION_OBJECT -FOR UPDATE -AS - UPDATE TBIDB_CONVERSATION_OBJECT SET CHANGED_WHEN = GETDATE() - FROM INSERTED - WHERE TBIDB_CONVERSATION_OBJECT.GUID = INSERTED.GUID -GO - - -GO ---DROP TABLE TBIDB_MYOBJECT_STATES; CREATE TABLE TBIDB_MYOBJECT_STATES ( GUID BIGINT NOT NULL IDENTITY (1, 1), @@ -1333,21 +1309,6 @@ AS FROM INSERTED WHERE TBIDB_MYOBJECT_STATES.GUID = INSERTED.GUID GO - - - -CREATE TABLE TBIDB_CONVERSATION_USER -( - GUID BIGINT NOT NULL IDENTITY (1, 1), - CONV_ID BIGINT NOT NULL, - USER_OR_GROUP_ID INTEGER NOT NULL, - IS_USER BIT NOT NULL, - ADDED_WHO BIGINT, - ADDED_WHEN DATETIME NOT NULL DEFAULT GETDATE(), - CONSTRAINT PK_TBIDB_CONVERSATION_USER PRIMARY KEY (GUID), - CONSTRAINT FK_TBIDB_CONVERSATION_USER_CONV_ID FOREIGN KEY (CONV_ID) REFERENCES TBIDB_CONVERSATION_OBJECT (GUID), - CONSTRAINT FK_TBIDB_CONVERSATION_USER_ADDED_WHO FOREIGN KEY (ADDED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID),) -GO CREATE TABLE TBIDB_COMMON_SQL ( GUID INTEGER NOT NULL IDENTITY (1, 1), @@ -1880,7 +1841,7 @@ CREATE TABLE TBIDB_SEARCH_LANGUAGE_SQL_RESULT CONSTRAINT FK_TBIDB_SEARCH_LANGUAGE_SQL_RESULT_STID FOREIGN KEY (SEARCH_TERM_ID) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID), CONSTRAINT FK_TBIDB_SEARCH_LANGUAGE_SQL_RESULT_ADDED_WHO FOREIGN KEY (ADDED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID), CONSTRAINT FK_TBIDB_SEARCH_LANGUAGE_SQL_RESULT_CHANGED_WHO FOREIGN KEY (CHANGED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID), - --CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_USER_ID FOREIGN KEY (USER_ID) REFERENCES @MY_DD_ECM_DB.dbo.TBDD_USER (GUID), + --CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_USER_ID FOREIGN KEY (USER_ID) REFERENCES DD_ECM.dbo.TBDD_USER (GUID), CONSTRAINT UQ_TBIDB_SEARCH_LANGUAGE_SQL_RESULT UNIQUE(SEARCH_PROFIL_ID,LANGUAGE_ID) ) GO @@ -1903,7 +1864,7 @@ CREATE TABLE TBIDB_SEARCH_PROFILE_USER_GROUP CONSTRAINT PK_TBIDB_SEARCH_PROFILE_USER_GUID PRIMARY KEY (GUID), CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_PID FOREIGN KEY (SEARCH_PROFIL_ID) REFERENCES TBIDB_SEARCH_PROFILE (GUID), CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_ADDED_WHO FOREIGN KEY (ADDED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID), - --CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_USER_ID FOREIGN KEY (USER_ID) REFERENCES @MY_DD_ECM_DB.dbo.TBDD_USER (GUID), + --CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_USER_ID FOREIGN KEY (USER_ID) REFERENCES DD_ECM.dbo.TBDD_USER (GUID), CONSTRAINT UQ_TBIDB_SEARCH_PROFILE_USER UNIQUE(SEARCH_PROFIL_ID,USER_ID,GROUP_ID) ) GO @@ -1919,7 +1880,7 @@ GO -- CONSTRAINT PK_TBIDB_SEARCH_PROFILE_GROUP_GUID PRIMARY KEY (GUID), -- CONSTRAINT FK_TBIDB_SEARCH_PROFILE_GROUP_P_ID FOREIGN KEY (SEARCH_PROFIL_ID) REFERENCES TBIDB_SEARCH_PROFILE (GUID), -- CONSTRAINT FK_TBIDB_SEARCH_PROFILE_GROUP_ADDED_WHO FOREIGN KEY (ADDED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID), --- --CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_USER_ID FOREIGN KEY (USER_ID) REFERENCES @MY_DD_ECM_DB.dbo.TBDD_USER (GUID), +-- --CONSTRAINT FK_TBIDB_SEARCH_PROFILE_USER_USER_ID FOREIGN KEY (USER_ID) REFERENCES DD_ECM.dbo.TBDD_USER (GUID), -- CONSTRAINT UQ_TBIDB_SEARCH_PROFILE_GROUP UNIQUE(SEARCH_PROFIL_ID,GROUP_ID) --) --GO @@ -2044,7 +2005,7 @@ GO -- -- SOURCE_ATTR_ID = @SOURCE_ATTR_ID AND -- -- USR_ID = @USR_ID; --- SELECT @pLANG_CODE = [LANGUAGE] FROM @MY_DD_ECM_DB.dbo.TBDD_USER WHERE GUID = @USR_ID +-- SELECT @pLANG_CODE = [LANGUAGE] FROM DD_ECM.dbo.TBDD_USER WHERE GUID = @USR_ID -- INSERT INTO TBIDB_SEARCH_RESTRICTIONS_OBJECTS (SEARCH_ID,RESTR_ATTR_ID, SOURCE_ATTR_ID, IDB_OBJ_ID, USR_ID) -- SELECT @SEARCH_ID,@RESTR_ATTR_ID, @SOURCE_ATTR_ID,T.IDB_OBJECT_ID,@USR_ID -- FROM [dbo].[FNIDB_GET_TERM_FOR_ATTRIBUTE_ID] (@SOURCE_ATTR_ID,@pLANG_CODE,@USR_ID) T LEFT JOIN TBIDB_SEARCH_RESTRICTIONS_OBJECTS T1 @@ -2117,20 +2078,6 @@ ON [dbo].[TBIDB_OBJECT_METADATA_CHANGE] ([IDB_OBJ_ID]) INCLUDE ([CHANGED_WHEN]) GO -CREATE TABLE TBIDB_CONVERSATION_MESSAGE -( - GUID BIGINT NOT NULL IDENTITY (1, 1), - CONV_ID BIGINT NOT NULL, - TO_USER BIGINT NOT NULL DEFAULT 0, - FROM_USER BIGINT NOT NULL, - MESSAGE_TERM_ID BIGINT NOT NULL, - ADDED_WHO BIGINT, - ADDED_WHEN DATETIME NOT NULL DEFAULT GETDATE(), - CONSTRAINT PK_TBIDB_CONVERSATION_MESSAGE PRIMARY KEY (GUID), - CONSTRAINT FK_TBIDB_CONVERSATION_MESSAGE_CONV_ID FOREIGN KEY (CONV_ID) REFERENCES TBIDB_CONVERSATION_OBJECT (GUID), - CONSTRAINT FK_TBIDB_CONVERSATION_MESSAGE_MESSAGE_FROM_USER FOREIGN KEY (FROM_USER) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID), - CONSTRAINT FK_TBIDB_CONVERSATION_MESSAGE_ADDED_WHO FOREIGN KEY (ADDED_WHO) REFERENCES TBIDB_TERM_VALUE_VARCHAR (GUID),) -GO --CREATE TABLE TBIDB_USER_SEARCH_CRITERIA --( -- GUID BIGINT NOT NULL IDENTITY (1, 1), @@ -2412,6 +2359,144 @@ GO /*########################### ######### FUNCTIONS ######### #############################*/ +USE [IDB] +GO +/****** Object: UserDefinedFunction [dbo].[FNIDB_GET_TERM_DATE] Script Date: 20.12.2024 14:19:07 ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ================================================================= +-- Gets the GUID of Attribute-Record for a certain DATE TERM +-- ================================================================= +-- Copyright (c) 2024 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: 20.12.2024 MS +CREATE OR ALTER FUNCTION [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_DATE] (@IDB_OBJ_ID BIGINT, @ATTRIBUTE VARCHAR(30),@TERM_VALUE DATE) +RETURNS BIGINT +AS +BEGIN + DECLARE @TERM_ID BIGINT, @RESULT BIGINT + SELECT + @RESULT = MD.GUID + FROM + TBIDB_OBJECT_METADATA MD INNER JOIN TBIDB_TERM_VALUE_DATE TV ON MD.INT_TERM_ID = TV.GUID + INNER JOIN TBIDB_ATTRIBUTE ATTR ON MD.ATTR_ID = ATTR.GUID + WHERE + IDB_OBJ_ID = @IDB_OBJ_ID and ATTR.TITLE = @ATTRIBUTE AND TV.TERM_VALUE = @TERM_VALUE; + RETURN @RESULT +END +GO +USE [IDB] +GO +/****** Object: UserDefinedFunction [dbo].[FNIDB_GET_TERM_DECIMAL] Script Date: 20.12.2024 14:19:07 ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ================================================================= +-- Gets the GUID of Attribute-Record for a certain DECIMAL TERM +-- ================================================================= +-- Copyright (c) 2024 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: 20.12.2024 MS +CREATE OR ALTER FUNCTION [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_DECIMAL] (@IDB_OBJ_ID BIGINT, @ATTRIBUTE VARCHAR(30),@TERM_VALUE BIGINT) +RETURNS BIGINT +AS +BEGIN + DECLARE @TERM_ID BIGINT, @RESULT BIGINT + SELECT + @RESULT = MD.GUID + FROM + TBIDB_OBJECT_METADATA MD INNER JOIN TBIDB_TERM_VALUE_DECIMAL TV ON MD.INT_TERM_ID = TV.GUID + INNER JOIN TBIDB_ATTRIBUTE ATTR ON MD.ATTR_ID = ATTR.GUID + WHERE + IDB_OBJ_ID = @IDB_OBJ_ID and ATTR.TITLE = @ATTRIBUTE AND TV.TERM_VALUE = @TERM_VALUE; + RETURN @RESULT +END +GO +USE [IDB] +GO +/****** Object: UserDefinedFunction [dbo].[FNIDB_GET_TERM_INTEGER] Script Date: 20.12.2024 14:19:07 ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +-- ================================================================= +-- Gets the GUID of Attribute-Record for a certain INTEGER TERM +-- ================================================================= +-- Copyright (c) 2024 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: 20.12.2024 MS +CREATE OR ALTER FUNCTION [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_INTEGER] (@IDB_OBJ_ID BIGINT, @ATTRIBUTE VARCHAR(30),@TERM_VALUE BIGINT) +RETURNS BIGINT +AS +BEGIN + DECLARE @TERM_ID BIGINT, @RESULT BIGINT + SELECT + @RESULT = MD.GUID + FROM + TBIDB_OBJECT_METADATA MD INNER JOIN TBIDB_TERM_VALUE_INTEGER TV ON MD.INT_TERM_ID = TV.GUID + INNER JOIN TBIDB_ATTRIBUTE ATTR ON MD.ATTR_ID = ATTR.GUID + WHERE + IDB_OBJ_ID = @IDB_OBJ_ID and ATTR.TITLE = @ATTRIBUTE AND TV.TERM_VALUE = @TERM_VALUE; + RETURN @RESULT +END +GO +USE [IDB] +GO + +/****** Object: UserDefinedFunction [dbo].[FNIDB_GET_TERM_VALUE_VARCHAR] Script Date: 20.12.2024 13:58:38 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO +-- ================================================================= +-- Gets the GUID of Attribute-Record for a certain TERM +-- ================================================================= +-- Copyright (c) 2024 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: 20.12.2024 MS +CREATE OR ALTER FUNCTION [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_TEXT] (@IDB_OBJ_ID BIGINT, @ATTRIBUTE VARCHAR(30),@TERM VARCHAR(950),@LANG_CODE VARCHAR(5)) +RETURNS BIGINT +AS +BEGIN + DECLARE @RESULT BIGINT + + select + @RESULT = T.GUID + from + TBIDB_OBJECT_METADATA T + INNER JOIN TBIDB_ATTRIBUTE T1 ON T.ATTR_ID = T1.GUID + INNER JOIN TBIDB_LANGUAGE_TERM T2 ON T.GUID = T2.[OBJECT_ID] + INNER JOIN TBIDB_OBJECT OBJ ON T.IDB_OBJ_ID = OBJ.IDB_OBJ_ID + INNER JOIN TBIDB_TERM_VALUE_VARCHAR T3 ON T2.TERM_ID = T3.GUID + INNER JOIN TBIDB_LANGUAGE T4 ON T2.LANG_ID = T4.GUID + WHERE + T.IDB_OBJ_ID = @IDB_OBJ_ID AND + OBJ.ACTIVE = 1 AND + T4.LANG_CODE = @LANG_CODE AND + T3.TERM_VALUE = @TERM AND + T1.TITLE = @ATTRIBUTE; + RETURN @RESULT +END +GO + + + CREATE OR ALTER FUNCTION [dbo].[FNIDB_GET_VARIABLE_VALUE] (@IDB_OBJ_ID BIGINT, @ATTRIBUTE VARCHAR(100),@LANG_CODE VARCHAR(10)) RETURNS @Output TABLE (TERM_VALUE NVARCHAR(900), TERM_DATE DATE,TERM_DATETIME DATETIME) AS @@ -2958,38 +3043,6 @@ BEGIN END GO ------------------------------------------------------------------- - -CREATE FUNCTION [dbo].[FNIDB_OBJECT_DYNAMIC_CONFIG] (@pIDB_OBJ_ID as INTEGER, @pUSERID as INTEGER) -RETURNS - @Table TABLE - (CONF_TITLE VARCHAR(900),CONF_VALUE VARCHAR(900)) -AS -BEGIN - DECLARE @CONVID BIGINT - SELECT @CONVID = CONVERSATION_ID FROM VWIDB_CONVERSATION WHERE IDB_OBJ_ID = @pIDB_OBJ_ID AND CONVERSATION_STATE = 'Started' - IF @CONVID > 0 - BEGIN - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_ID',@CONVID); - END - - IF EXISTS(SELECT CONV_ID FROM VWIDB_CONVERSATION_USER WHERE CONV_ID = @CONVID AND USER_ID = @pUSERID) - BEGIN - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_USER_ACTIVE','True'); - END - - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_RIGHT','Admin'); - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_RIGHT','Start'); - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_RIGHT','Stop'); - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_RIGHT','AddMessage'); - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_RIGHT','AddUser'); - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('NEW_CONVERSATION_USER_SELECT','SELECT GUID as UserID, NAME, USERNAME, EMAIL from @MY_DD_ECM_DB.dbo.TBDD_USER'); - INSERT INTO @Table (CONF_TITLE, CONF_VALUE) VALUES ('CONVERSATION_ADD_USER_SELECT','SELECT GUID as UserID, NAME, USERNAME, EMAIL from @MY_DD_ECM_DB.dbo.TBDD_USER WHERE GUID NOT IN (SELECT USER_OR_GROUP_ID FROM - TBIDB_CONVERSATION_USER WHERE CONV_ID = @CONVID AND IS_USER = 1)'); - -RETURN -END -GO - CREATE FUNCTION [dbo].[FNIDB_GET_FILE_PATH] (@pIDB_OBJ_ID BIGINT) RETURNS VARCHAR(500) AS @@ -3594,45 +3647,6 @@ FROM VWIDB_VALUE_TEXT where [Geδndert wann] IS NULL ORDER BY IDB_OBJ_ID DESC,LAST_CHANGE DESC GO - -CREATE VIEW VWIDB_CONVERSATION AS -SELECT - GUID As CONVERSATION_ID - ,IDB_OBJ_ID - ,[dbo].[FNIDB_GET_TERM_FOR_LANG_TERM_ID] (TITLE_TERM_ID,'de-DE') as TITLE - --,[dbo].[FNIDB_GET_STATE_FOR_OBJECT_ID] (GUID) AS CONVERSATION_STATE - ,[dbo].[FNIDB_GET_TERM_VALUE_VARCHAR] (ADDED_WHO) as ADDED_WHO - ,ADDED_WHEN - ,[dbo].[FNIDB_GET_TERM_VALUE_VARCHAR] (CHANGED_WHO) as CHANGED_WHO - ,CHANGED_WHEN -FROM TBIDB_CONVERSATION_OBJECT -GO -CREATE VIEW VWIDB_CONV_MESSAGES AS -select - T.GUID, - T.CONV_ID, - (SELECT EMAIL FROM DD_ECM.dbo.TBDD_USER WHERE GUID = T.TO_USER) TO_USER, - [dbo].[FNIDB_GET_TERM_FOR_LANG_TERM_ID] (T1.TITLE_TERM_ID,'de-DE') AS CONV_TITLE - ,[dbo].[FNIDB_GET_TERM_VALUE_VARCHAR] (T.FROM_USER) as USER_FROM - ,[dbo].[FNIDB_GET_TERM_FOR_LANG_TERM_ID] (T.MESSAGE_TERM_ID,'de-DE') as MESSAGE_TEXT - ,[dbo].[FNIDB_GET_TERM_FOR_LANG_TERM_ID] (T.ADDED_WHO,'de-DE') as ADDED_WHO - ,T.ADDED_WHEN -from TBIDB_CONVERSATION_MESSAGE T INNER JOIN TBIDB_CONVERSATION_OBJECT T1 ON T.CONV_ID = T1.GUID -GO - -CREATE VIEW VWIDB_CONVERSATION_USER AS -SELECT - T.CONV_ID - ,T1.GUID As USER_ID - ,T1.USERNAME - ,T1.EMAIL - ,T1.NAME + ', ' + T1.PRENAME as NAME -FROM - [IDB].[dbo].[TBIDB_CONVERSATION_USER] T - INNER JOIN @MY_DD_ECM_DB.dbo.TBDD_USER T1 ON T.USER_OR_GROUP_ID = T1.GUID -WHERE IS_USER = 1 -GO - --CREATE VIEW VWIDB_SEARCH_PROFILE_ATTRIBUTES AS --SELECT -- T.SEARCH_PROFIL_ID, @@ -4708,10 +4722,6 @@ BEGIN EXEC sp_executesql @SQL1 END GO ---EXEC PRIDB_CREATE_VIEW_DOC_DATA 'de-DE','DEFAULT' ---GO ---EXEC PRIDB_CREATE_VIEW_DOC_DATA 'de-DE','' ---GO CREATE OR ALTER PROCEDURE [dbo].[PRIDB_DELETE_TERM_OBJECT_METADATA] @IDB_OBJ_ID BIGINT, @ATTRIBUTE VARCHAR(100), @TERM VARCHAR(900), @WHO VARCHAR(100),@LANG_CODE VARCHAR(5) = 'de-DE',@ID_ISFOREIGN as BIT = False AS BEGIN @@ -4719,84 +4729,45 @@ BEGIN @ATTR_ID INTEGER, @TYP_ID TINYINT, @TYP_DESCR VARCHAR(100), - @MULTI BIT, - @LANG_ID INT - --IF @ID_ISFOREIGN = 1 - -- BEGIN - -- SELECT @IDB_OBJ_ID = IDB_OBJ_ID FROM TBIDB_OBJECT WHERE REFERENCE_KEY = @IDB_OBJ_ID - -- END + @MULTI BIT SELECT @ATTR_ID = T.GUID, @TYP_ID = T.TYP_ID, @MULTI = T.MULTI_CONTEXT,@TYP_DESCR = T1.NAME_TYPE FROM TBIDB_ATTRIBUTE T, TBIDB_ATTRIBUTE_TYPE T1 WHERE T.TYP_ID = T1.GUID AND UPPER(T.TITLE) = UPPER(@ATTRIBUTE) - SELECT @LANG_ID = GUID FROM TBIDB_LANGUAGE WHERE LANG_CODE = @LANG_CODE - - DECLARE @MY_TERM_ID BIGINT - EXEC PRIDB_NEW_TERM @TYP_DESCR,@TERM,'',@TERM_ID = @MY_TERM_ID OUTPUT; - - PRINT '@MY_TERM_ID: ' + CONVERT(VARCHAR(10),@MY_TERM_ID) + DECLARE @MY_GUID BIGINT IF @TYP_ID IN (1,8) --VARCHAR BEGIN PRINT 'Attribute is varchar...' - IF EXISTS(SELECT GUID FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID) - BEGIN - DELETE FROM TBIDB_LANGUAGE_TERM WHERE [OBJECT_ID] = (SELECT GUID FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID); - DELETE FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID; - PRINT 'PRIDB_DEL_TERM_OBJECT_METADATA: DELETED TEXT ROW!' - INSERT INTO TBIDB_OBJECT_METADATA_DELETE (IDB_OBJ_ID,ATTR_ID,TEXT_TERM_ID,DELETED_WHO, ADDED_WHO,ADDED_WHEN) - SELECT @IDB_OBJ_ID,@ATTR_ID, @MY_TERM_ID,@WHO,ADDED_WHO,ADDED_WHEN FROM TBIDB_OBJECT_METADATA - WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID; - END - ELSE - PRINT 'TERM SEEMS NOT TO EXIST' + SELECT @MY_GUID = [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_TEXT] (@IDB_OBJ_ID,@ATTRIBUTE,@TERM,@LANG_CODE); END ELSE IF @TYP_ID IN (2,7,9) --BIGINT BEGIN - IF EXISTS(SELECT GUID FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND INT_TERM_ID = @MY_TERM_ID) - BEGIN - DELETE FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND INT_TERM_ID = @MY_TERM_ID - PRINT 'PRIDB_DEL_TERM_OBJECT_METADATA: DELETED INTEGER ROW!' - INSERT INTO TBIDB_OBJECT_METADATA_DELETE (IDB_OBJ_ID,ATTR_ID,INT_TERM_ID,DELETED_WHO, ADDED_WHO,ADDED_WHEN) - SELECT @IDB_OBJ_ID,@ATTR_ID, @MY_TERM_ID,@WHO,ADDED_WHO,ADDED_WHEN FROM TBIDB_OBJECT_METADATA - WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND INT_TERM_ID = @MY_TERM_ID - END + PRINT 'Attribute is bigint...' + SELECT @MY_GUID = [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_INTEGER] (@IDB_OBJ_ID, @ATTRIBUTE,@TERM) END ELSE IF @TYP_ID = 3 --FLOAT BEGIN - IF EXISTS(SELECT GUID FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND FLOAT_TERM_ID = @MY_TERM_ID) - BEGIN - DELETE FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND FLOAT_TERM_ID = @MY_TERM_ID - PRINT 'PRIDB_DEL_TERM_OBJECT_METADATA: DELETED FLOAT ROW!' - INSERT INTO TBIDB_OBJECT_METADATA_DELETE (IDB_OBJ_ID,ATTR_ID,FLOAT_TERM_ID,DELETED_WHO, ADDED_WHO,ADDED_WHEN) - SELECT @IDB_OBJ_ID,@ATTR_ID, @MY_TERM_ID,@WHO,ADDED_WHO,ADDED_WHEN FROM TBIDB_OBJECT_METADATA - WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND FLOAT_TERM_ID = @MY_TERM_ID - END + PRINT 'Attribute is float...' + SELECT @MY_GUID = [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_FLOAT] (@IDB_OBJ_ID, @ATTRIBUTE,@TERM) END ELSE IF @TYP_ID = 4 --DECIMAL BEGIN - IF EXISTS(SELECT GUID FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND DEC_TERM_ID = @MY_TERM_ID) - BEGIN - DELETE FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND DEC_TERM_ID = @MY_TERM_ID - PRINT 'PRIDB_DEL_TERM_OBJECT_METADATA: DELETED DECIMAL ROW!' - INSERT INTO TBIDB_OBJECT_METADATA_DELETE (IDB_OBJ_ID,ATTR_ID,DEC_TERM_ID,DELETED_WHO, ADDED_WHO,ADDED_WHEN) - SELECT @IDB_OBJ_ID,@ATTR_ID, @MY_TERM_ID,@WHO,ADDED_WHO,ADDED_WHEN FROM TBIDB_OBJECT_METADATA - WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND DEC_TERM_ID = @MY_TERM_ID - END + PRINT 'Attribute is decimal...' + SELECT @MY_GUID = [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_DECIMAL] (@IDB_OBJ_ID, @ATTRIBUTE,@TERM) END ELSE IF @TYP_ID = 5 --DATE BEGIN - IF EXISTS(SELECT GUID FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND DATE_TERM_ID = @MY_TERM_ID) - BEGIN - DELETE FROM TBIDB_OBJECT_METADATA WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND DATE_TERM_ID = @MY_TERM_ID - PRINT 'PRIDB_DEL_TERM_OBJECT_METADATA: DELETED DATE ROW!' - INSERT INTO TBIDB_OBJECT_METADATA_DELETE (IDB_OBJ_ID,ATTR_ID,DATE_TERM_ID,DELETED_WHO, ADDED_WHO,ADDED_WHEN) - SELECT @IDB_OBJ_ID,@ATTR_ID, @MY_TERM_ID,@WHO,ADDED_WHO,ADDED_WHEN FROM TBIDB_OBJECT_METADATA - WHERE IDB_OBJ_ID = @IDB_OBJ_ID AND ATTR_ID = @ATTR_ID AND DATE_TERM_ID = @MY_TERM_ID - END + PRINT 'Attribute is date...' + SELECT @MY_GUID = [dbo].[FNIDB_GET_METADATA_GUID_FOR_TERM_DATE] (@IDB_OBJ_ID, @ATTRIBUTE,@TERM) END - - + IF @MY_GUID IS NOT NULL + BEGIN + DELETE FROM TBIDB_OBJECT_METADATA WHERE GUID = @MY_GUID; + PRINT 'PRIDB_DEL_TERM_OBJECT_METADATA: DELETED TEXT ROW!' + END + ELSE + PRINT 'TERM SEEMS NOT TO EXIST' END GO @@ -4962,33 +4933,6 @@ BEGIN END END -GO ---delete from TBIDB_CONVERSATION_OBJECT -CREATE PROCEDURE [dbo].[PRIDB_NEW_CONVERSATION] @pIDB_OBJ_ID BIGINT, @pTITLE VARCHAR(512),@pWHO VARCHAR(100),@pLANG_CODE VARCHAR(5) = 'de-DE' -AS -BEGIN - DECLARE - @LANG_ID INTEGER - - SELECT @LANG_ID = GUID FROM TBIDB_LANGUAGE WHERE LANG_CODE = @pLANG_CODE - - DECLARE @TITLE_TERM_ID BIGINT,@LANG_TITLE_TERM_ID BIGINT - EXEC PRIDB_NEW_TERM 'VARCHAR',@pTITLE,@pWHO,@TERM_ID = @TITLE_TERM_ID OUTPUT; - DECLARE @ADDED_WHO_TERM_ID BIGINT - EXEC PRIDB_NEW_TERM 'VARCHAR',@pWHO,@pWHO,@TERM_ID = @ADDED_WHO_TERM_ID OUTPUT; - - IF NOT EXISTS(SELECT GUID FROM TBIDB_CONVERSATION_OBJECT WHERE IDB_OBJ_ID = @pIDB_OBJ_ID AND TITLE_TERM_ID = @LANG_TITLE_TERM_ID) - INSERT INTO TBIDB_CONVERSATION_OBJECT (TITLE_TERM_ID,IDB_OBJ_ID,ADDED_WHO) VALUES (@LANG_TITLE_TERM_ID,@pIDB_OBJ_ID,@ADDED_WHO_TERM_ID) - - DECLARE @STARTED_STATE BIGINT - SELECT @STARTED_STATE = GUID FROM TBIDB_STATES T WHERE dbo.[FNIDB_GET_TERM_FOR_LANG_TERM_ID] (T.TITLE,'de-DE') = 'Started' - - DECLARE @CONVERSATION_ID BIGINT - SELECT @CONVERSATION_ID = GUID FROM TBIDB_CONVERSATION_OBJECT WHERE TITLE_TERM_ID = @LANG_TITLE_TERM_ID AND IDB_OBJ_ID = @pIDB_OBJ_ID - - IF NOT EXISTS(SELECT GUID FROM TBIDB_MYOBJECT_STATES WHERE MY_OBJECT_ID = @CONVERSATION_ID AND STATE_ID = @STARTED_STATE) - INSERT INTO TBIDB_MYOBJECT_STATES (MY_OBJECT_ID,STATE_ID,ADDED_WHO) VALUES (@CONVERSATION_ID,@STARTED_STATE,@ADDED_WHO_TERM_ID) -END GO CREATE OR ALTER PROCEDURE dbo.PRIDB_OBJECT_SET_STATE @pOBJECT_ID BIGINT, @pSTATE VARCHAR(512),@pWHO VARCHAR(100) AS @@ -5006,64 +4950,6 @@ BEGIN --ELSE -- PRINT 'ALREADY WRITTEN IN THIS SECOND' -END -GO -CREATE PROCEDURE [dbo].[PRIDB_END_CONVERSATION] @pCONVID BIGINT, @pWHO VARCHAR(100), @pLANG_CODE VARCHAR(5) = 'de-DE' -AS -BEGIN - DECLARE - @LANG_ID INTEGER - ,@ENDED_STATE BIGINT - - SELECT @LANG_ID = GUID FROM TBIDB_LANGUAGE WHERE LANG_CODE = @pLANG_CODE - SELECT @ENDED_STATE = GUID FROM TBIDB_STATES T WHERE dbo.[FNIDB_GET_TERM_FOR_LANG_TERM_ID] (T.TITLE,'de-DE') = 'Ended' - - DECLARE @WHO_TERM_ID BIGINT - EXEC PRIDB_NEW_TERM 'VARCHAR',@pWHO,@pWHO,@TERM_ID = @WHO_TERM_ID OUTPUT; - - - IF NOT EXISTS(SELECT MY_OBJECT_ID FROM TBIDB_MYOBJECT_STATES WHERE MY_OBJECT_ID = @pCONVID AND STATE_ID = @ENDED_STATE) - INSERT INTO TBIDB_MYOBJECT_STATES ( - MY_OBJECT_ID - ,STATE_ID - ,ADDED_WHO) VALUES ( - @pCONVID - ,@ENDED_STATE - ,@WHO_TERM_ID) -END -GO -CREATE PROCEDURE [dbo].[PRIDB_ADD_USER_2_CONVERSATION] @pCONV_ID BIGINT, @pUSERID INTEGER,@pWHO VARCHAR(100) -AS -BEGIN - DECLARE @ADDED_WHO_TERM_ID BIGINT - EXEC PRIDB_NEW_TERM 'VARCHAR',@pWHO,@pWHO,@TERM_ID = @ADDED_WHO_TERM_ID OUTPUT; - - IF NOT EXISTS(SELECT GUID FROM TBIDB_CONVERSATION_USER WHERE CONV_ID = @pCONV_ID AND USER_OR_GROUP_ID = @pUSERID AND IS_USER = 1) - INSERT INTO TBIDB_CONVERSATION_USER (CONV_ID,USER_OR_GROUP_ID,IS_USER,ADDED_WHO) VALUES (@pCONV_ID,@pUSERID,1,@ADDED_WHO_TERM_ID) - -END -GO - -CREATE PROCEDURE [dbo].[PRIDB_NEW_CONVERSATION_MESSAGE] @pCONV_ID BIGINT, @pMESSAGE VARCHAR(100), @pWHO VARCHAR(100),@pTO_USER INTEGER = 0, @pLANG_CODE VARCHAR(5) = 'de-DE' -AS -BEGIN - DECLARE - @LANG_ID INTEGER - - SELECT @LANG_ID = GUID FROM TBIDB_LANGUAGE WHERE LANG_CODE = @pLANG_CODE - - DECLARE @MESSAGE_TERM_ID BIGINT,@LANG_MESSAGE_TERM_ID BIGINT - EXEC PRIDB_NEW_TERM 'VARCHAR',@pMESSAGE,@pWHO,@TERM_ID = @MESSAGE_TERM_ID OUTPUT; - DECLARE @ADDED_WHO_TERM_ID BIGINT - EXEC PRIDB_NEW_TERM 'VARCHAR',@pWHO,@pWHO,@TERM_ID = @ADDED_WHO_TERM_ID OUTPUT; - - IF NOT EXISTS(SELECT GUID FROM TBIDB_TERM_LANGUAGE WHERE LANGUAGE_ID = @LANG_ID AND TEXT_TERM_ID = @MESSAGE_TERM_ID) - INSERT INTO TBIDB_TERM_LANGUAGE (LANGUAGE_ID,TEXT_TERM_ID,ADDED_WHO) VALUES (@LANG_ID,@MESSAGE_TERM_ID,@pWHO) - SELECT @LANG_MESSAGE_TERM_ID = MAX(GUID) FROM TBIDB_TERM_LANGUAGE WHERE LANGUAGE_ID = @LANG_ID AND TEXT_TERM_ID = @MESSAGE_TERM_ID - - --IF NOT EXISTS(SELECT GUID FROM TBIDB_CONVERSATION_MESSAGE WHERE CONV_ID = @pCONV_ID AND FROM_USER = FROM_USER AND MESSAGE_TERM_ID = @LANG_MESSAGE_TERM_ID) - INSERT INTO TBIDB_CONVERSATION_MESSAGE (CONV_ID,FROM_USER,TO_USER, MESSAGE_TERM_ID, ADDED_WHO) VALUES (@pCONV_ID,@ADDED_WHO_TERM_ID,@pTO_USER, @LANG_MESSAGE_TERM_ID,@ADDED_WHO_TERM_ID) - END GO CREATE PROCEDURE PRIDB_GET_VALUE_TYPE @pVALUE VARCHAR(900)--,@oType VARCHAR(10) OUTPUT diff --git a/01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.0.sql b/01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.0.sql index bc43cce26e3f16c7b39f51fcb5b8d339d600c45e..0d16f9f4ca0c408d3a5535c67cea74e6ce1ba13f 100644 GIT binary patch delta 45 hcmX@7b3p*qyR zEw^NdJNvH>IUjbWc+WH<`u4CZCBb?L$wEdd6Twra-V!~XK%Uk@NW_q^e5csuIEyt` z-gvNH;9>q1_8BBoJg=~uLoZN7D(H-G8_G+?D%E&WNDr|$JbjIf*wHWJ38Cw&e@`yf zwj)STb1tViWeg$qo6~*T*YXW`eMQ#9?^7)w0tZ%wD0sNDmHItJi?s~lhlmXjX{mar zx^pO1wXFm;a-d+^Cp-EUWz&W`Ib_GU<#07=#>YHuXDF~{jQ$0@6BSlGj#4Dy58qxp9kFSMf6auE$`3@7kn6(MuaJFm- diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BACKUP_1372.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BACKUP_1372.sql deleted file mode 100644 index 68563ff923a620faa80f0250e80a8472b10a663b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29780 zcmeI5>2g%Z702(_Nmbrqz9HKJBR1QlT!lb`ECWK31~67pQ^Y1-;w6R2`mA}DB>!KZ zIqL1+nLCR>2x@BJs&8-S^x02$&;S1War0rb-R$TyZ0oBR4aY@RfG&3?11vXTBi z(!axIta9q?huV`+Z#UGNG><}^!)DSvP^}&PeP3;U-~29oV;_5JKWuI_f6eMm)cOmx zJJc8x^}nsRjQF{}7xZpVGnuGlzj>_x@2K8|(C?rbG`Cf5vtTqz24ODaFixD;u3A0R zybh}VtzYK&P;W=g#W2E1vjF0Bth8rv_FxKqci&$%_KEXlw4D>od?@UH9R9MI4x8gC zc1N1UgXURyx2t&oondcZe*xV{eeVg@vA)A*BR~z-?}WEoD!UtCexRqZ@WdMD>qEOI z!u&|}!1v;-@PS$x-s^RMf}k8$br>*Z6x21BjgytxY@NxbR%lPqfkFDE)>yq8rEcl( z?Ew3psASYIv&SmAuQea3rq6Rjv@>dcY5v~4Xntyb6(zpVitp;*U-W(1Ja1m9^rdQT zcG4bi{?dHY+-QDmJ`?_q)Z51z=gTnSzlHZ7wRT^t^onM1wfTqYe67-dH6N+u7tQ~E zb5FGPS@Xx{x8~F4J3Wom_Nge|#(fh0-x3st-AFa-q=iVgB_)(RIG;y+rpwSlK97_R zSlh91a~Npje#@%bdLkKSaqwm{3zx{i_!)}7{-hOrp%s4B+!W=&KhIV6lgi-GZ}t4E zc=M8;q2^pd#d$mnZE1g`zFsyzh}vH1ubn_;FGAm!o9pUlOLTEb-^==5RgEo`-fXUk zE^eyqx=P~wTw)*xO-h+`-quXu|HWpwF{Q9$@xUYT(vIMwhaW_zufj8Btp8YV$D+{< z&Cc*SRH@0LeYHh%Y@YNMC2w1w-R{UQCMd3o ze~}X1y&kEL+u~}IsWzLop00=Wo81>0?MR<(;dwNLtgWw~HNSt(nHQ4(K&!#}A4#U0 z4Bwyj`t6juUTF<~7R55}dVT6XwgZ=$G+nMwvm-`9&-9s77wz1Uyxi8D!4x{HPhTbd z8MVR>-RlO|eLBT;+5V0w8=61VOwgzkeV+#Vpr*>S?NGI8X}W1UXeadFvD)4Xz08&u z2O4ot+Jn`2s&@AT0sr3-cfk`T4Z(|Pw08d8R?Rzs7e5HL+*laJMmSKvV3bvctG`m| z=lVXBcDgI>MN%36nPq{#g~H$ws14X2sFz1!9%WnXG_N^P|5#g-6A1Eg(9C9OPSi6N zr&*MDR3B|*wfDoE(z-wZU9{JR2f@DKJH@0~QnTJ8<-rJ)1O9E4S-rU~J}vz*(W==x zfc>X|lF=q-SD(}~Zl}*b|Ql|L=>=`^t?j8RmSnm>ye~ z1a(Uo>V*^0s1DJ5{ji7(t10xo1bb5w3}3-zl2JBt(EPqOf0FurWEYm}clzKT(PLlx zx0D7G(cxWDqUj&A?^cm#*JT^ulhgdP! zv*>fU(ljAbinSwN11xBB_p~XeHvdOo4BdtXp>z;5KlTJR2L6JT4iuMhAHd=$w*$t^ z2Xo7wTJ2JI5axlLL319S_yV*@rJ?n0y|&ezC6mpkKNKdg5D$Yda#>X1-X~ayF_0QA zvnw3R`7l}ic6ig)DSXx@ElF$6h7PM|b`66mMt0J*$11e<7ZuY$4*w_UH0+^=q6T6{ z(9tNYRJ8RN5zJ!S5fK`xF7&adCv0FS40wjZ^iVdljbYI!unkXds0CbrA5O$)Lr<(w zT&ZhXrOkpCD8Vx~oNb*@Vx(MOL#WGQhbd-__OWcYG`Gw87aP`|uO!b`ljl#8=TDR8 z&%!*Ahvj+?6{jJJ#CJ#UEn;VMJW%O@N=?IBq^&C+0LDiFk2wsidd?$xT+Zp$u++tW zjwxpEbO1LnCU^pS>s&3TgE9u|^XOVJpe52ltYaAT&yFbPp74l|Z1iRrgtnnU=&8hd z8-=hUcr~ePyA|m2QRtUAv-v3IKe=QB`%rIP>rgF>#>OYKY3rU#ny&VEX}}wM-#C%6 zP<`a%S#hLNkLJ`-QY+fk$L*q(q39JVDP=&uHgP3^xgW%au@YwU9c^Yg+>a%1y7&dp zkkv$9nOtduybruNBrZwfs+5$${JYi^2=o5dB?C-u-O$(;@i6V&kNXFKlkSR!@vDg# zq_kdg&p{+J~LyKq;+e)eTy+v?@gupQPMSL>CE*H(}v<~11=KNg31gcExe{m!alca*%A z%926gcPmM~smPCLdH5KM*SuQ8hs8t8uDPI*4)uwC+c4Pa4}+G2=b;XAP8an3NZ)x@ zHI#}K9s8ZM^thoq?jzAFyiIbGT$~j2$VEF z<;XDnfwsbC#Ht`4V0H%F0~e)mdu@CsqNCW_W}_LGp)bv8B5n)IJLj#mMgAslm1i~6R{0xi<*-6&tUYrvxfy%Cq&G2Zi$tR?_CqX9Yqv$YV=K@0 zr7c|Fm`9Mu>GPJhQ--$7`c~%YeJL2QlID5zP><1ZO-X3}v1qHN2s||A$k%1wd^yo? z7lPRr(Pu*HtrBIOy$iv){dLQRej1_1MOQv*^-L5wL#%tW0x@^SMxTQJ(c!)1IZ0^?QO};Xy+`~555w+Q_w|E)!%BfGQW*11~x1^XBXeWRYFQ$o_HpD zft}3kmG-=R+itKZ(d(YjF=ku4#bj9PFUi6Es(Y;#(FQermlO*G%kLkk`*;4a{ZO8V zI}W-zjVnh^v6@KA_dBPEz_RPeu;ErNdOqJ-g_V0+JExZSjnnmouFjthTHZe{apOA% zQV*F`$3Hf%iXO7%zpT{w#`!ANtvS(sV5{q^F`RNDK2n$cJebzu1c=v(Bbo#$XJ@79 z?Ba;Xa&P4tqMTJ)r_E*tH_^W|OqDxr*d5-rAEZt0S(!yC_XR6EJNkK{4o~#?SP3t6 zzIB*A_HGtvtaoXOmDr2n&!EG~Uu;%R4L*K4QcWK*XIau4a}OCB7lP2LxdV2?lXDfc(} z_;ocWl2akNYdMGcajkM@W+y_=a1PNjn;U1qIQQAdYqOkJ_o)`LYs=ygswakK+*8}S zDTl0!JL=UhIU3uCm2>(ypZ07&9$E%lk<;AzF<&|I0QQIR-Xf>m>bbbbnVz6Ky@*Xt z6|>GLwMBCA|I572L_3cSH-8T2V>u7Y-`z0OJ=jT=33QN(s+@g(KF!EtzifI$1A%zYySNKb+7pjo9@0-TcFEwi%}i?9gEfVmw{z# zk7IPtDb3*Zol}hVtk!QECecy-?umF4Rzp4G(pLZ@?V{vJh{&oOC)ri){|x5eT;UA?VKqx-BJM*I#tKa1Z$+@_nKQ>asmW06d8O%1E$ zg;V-@pWkhdX}#{4SH7dO%tyYfa&Z<`PD>ufF&C4At9nr`Te>AlKZ|3Xdw$ln6KOR$ zyokNB_$i4z2f^M$b`rsH_69#S-`BaL%mJ~*cym$O2m8Fysk5>T+qt-Y^x<1fv-tw`Id0wXN^6-IaWE;#jZ27Ja^deD`Y7|u?@B@wi7o! zbmPO?VkdCA$9}mDO%WlrGkWRYQ9rTk_%~T5FGGCg+vX3`x!8@QDP^Hi+8`p{?0P64 z)%B3ygt@8TOL88zr>j$b1uLairL2akUU8=wKZ#iW28Z1t2G??qjhk}XSH{mWNBmn( zdaO3IXge|5JtjK49xGkZdc6GY{51kYSVobf%UPNX+da7nvJDQ$pVJ`pnRE56sXcT> z>tQ!Zxm9Ekx}}2luCW*E`sl`gULMB<4sg!SXn)J^MW(w3N(jsQ83%z%+tzAR*z%cL z);_-jj`vVp+!IPk`>&ut^Ks{VeU~#m`Dde(dgwo=#gqbUJ}F1l^_@cfUe5IHVlah< l1HXK8Ef(*utS!`88Uc+(&#`^`{g<=)sI?07bGwu0{{spoXh8q~ diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BASE_1372.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BASE_1372.sql deleted file mode 100644 index e3998ab9f449fd0e5964a56a0a15960ecc45ca8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28858 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 diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_LOCAL_1372.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_LOCAL_1372.sql deleted file mode 100644 index 68563ff923a620faa80f0250e80a8472b10a663b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29780 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 diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_REMOTE_1372.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_REMOTE_1372.sql deleted file mode 100644 index 2de6c24a439e9e8118e6b4a049beab4c6743f74f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28812 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 EKZ*W3{Qv*}