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 bc43cce..0d16f9f 100644 Binary files a/01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.0.sql and b/01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.0.sql differ diff --git a/01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.1.sql b/01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.1.sql new file mode 100644 index 0000000..5ac0797 Binary files /dev/null and b/01_SMART_UP_TOOLS/08_ORGFLOW/SQL/UPDATE_SCRIPTS/2.5.5.1.sql differ diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/Update_1.1.0.1.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.1.0.1.sql similarity index 100% rename from 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/Update_1.1.0.1.sql rename to 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.1.0.1.sql diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/Update_1.1.0.2.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.1.0.2.sql similarity index 100% rename from 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/Update_1.1.0.2.sql rename to 01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.1.0.2.sql diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.1.0.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.1.0.sql new file mode 100644 index 0000000..bd9d024 --- /dev/null +++ b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.1.0.sql @@ -0,0 +1,18 @@ +UPDATE TBDD_MODULES SET DB_VERSION = '1.5.1.0' WHERE SHORT_NAME = 'SIG_ENV_CR' +GO + +--CHANGED 13.11.2024 MS RECEIVER_TERM integriert +ALTER VIEW [dbo].[VWSIG_ENVELOPE_RECEIVERS] as +SELECT R.GUID, + R.EMAIL_ADDRESS, + R.SIGNATURE, + ER.ENVELOPE_ID, + ER.PRIVATE_MESSAGE, + ER.ACCESS_CODE, + ER.[SEQUENCE], + ER.NAME, + ER.ADDED_WHEN, + R.EMAIL_ADDRESS + ' - ' + ER.[NAME] AS RECEIVER_TERM +FROM TBSIG_ENVELOPE_RECEIVER ER +JOIN TBSIG_RECEIVER R ON ER.RECEIVER_ID = R.GUID +GO \ No newline at end of file diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.2.0.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.2.0.sql new file mode 100644 index 0000000..1b88edc --- /dev/null +++ b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/1.5.2.0.sql @@ -0,0 +1,40 @@ +UPDATE TBDD_MODULES SET DB_VERSION = '1.5.2.0' WHERE SHORT_NAME = 'SIG_ENV_CR' +GO + + +ALTER TABLE [dbo].[TBSIG_CONFIG] DROP CONSTRAINT [DF__TBSIG_CON__DOCUM__0020D2BF] +GO +ALTER TABLE [dbo].[TBSIG_CONFIG] DROP CONSTRAINT [DF__TBSIG_CON__EXPOR__0114F6F8] +GO +ALTER TABLE [dbo].[TBSIG_CONFIG] DROP CONSTRAINT [DF__TBSIG_CON__DOCUM__02FD3F6A] +GO +ALTER TABLE [dbo].[TBSIG_CONFIG] DROP CONSTRAINT [DF__TBSIG_CON__FINIS__0A9E6132] +GO +ALTER TABLE [dbo].[TBSIG_CONFIG] DROP CONSTRAINT [DF__TBSIG_CON__EML_P__0B92856B] +GO + +ALTER TABLE TBSIG_CONFIG + DROP COLUMN DOCUMENT_PATH_DMZ; +GO +ALTER TABLE TBSIG_CONFIG + DROP COLUMN EXPORT_PATH_DMZ; +GO +ALTER TABLE TBSIG_CONFIG + DROP COLUMN DOCUMENT_PATH_MOVE_AFTSEND; +GO +ALTER TABLE TBSIG_CONFIG + DROP COLUMN FINISHED_PATH_EX_DMZ; +GO +ALTER TABLE TBSIG_CONFIG + DROP COLUMN EML_PATH_EX_DMZ; +GO +ALTER TABLE [dbo].[TBSIG_ENVELOPE] DROP CONSTRAINT [DF_TBSIG_ENVELOPE_DMZ_MOVED] +GO +ALTER TABLE TBSIG_ENVELOPE + DROP COLUMN DMZ_MOVED; +GO +ALTER VIEW [dbo].[VWSIG_CONFIG_DOC_PATH] AS +SELECT + DOCUMENT_PATH +FROM [dbo].[TBSIG_CONFIG] +GO \ No newline at end of file diff --git a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE.sql b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE.sql index 9a03208..07bd56d 100644 Binary files a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE.sql and b/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE.sql differ 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 68563ff..0000000 Binary files a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BACKUP_1372.sql and /dev/null differ 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 e3998ab..0000000 Binary files a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_BASE_1372.sql and /dev/null differ 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 68563ff..0000000 Binary files a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_LOCAL_1372.sql and /dev/null differ 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 2de6c24..0000000 Binary files a/01_SMART_UP_TOOLS/10_ENVELOPE_CREATOR/SIG_CREATE_REMOTE_1372.sql and /dev/null differ