--################################## --1. Define Your AdminUsers via replacing YourAdministratorUserName with proper UserNames DECLARE @ADMINUSER1 VARCHAR(100),@ADMINUSER2 VARCHAR(100) SET @ADMINUSER1 = 'YourAdministratorUserName' -- 2. Replace @WINDREAM_DB in code with name of WM-Database -- 3. Replace @DIGITALDATA.LOCAL with domainname of customer -- 4. Add the ECM-Login Data -- Search for @ECM_IP and replace it with IP or Name of MSSQL Server -- Search for @ECM_USER and replace it with DB-Username for ECM-DB -- Search for @ECM_PW and replace it with PW for ECM-User -- 5. Integrieren wir auch unsere IDB-Logik? -- Wenn Ja: Suchen nach IDB.dbo und entfernen der Auskommentierung der entspechenden Bereiche -- Execute Script and cross fingers :) -- #################################### CREATE TABLE TBIMPORT_USER (USR_NAME VARCHAR(100)); INSERT INTO TBIMPORT_USER (USR_NAME) VALUES (@ADMINUSER1); CREATE TABLE TBDD_BASECONFIG ( GUID TINYINT, WD_UNICODE BIT NOT NULL DEFAULT 1, WM_DB_CONSTRING VARCHAR(1000) NOT NULL DEFAULT '', WM_DRIVE VARCHAR(1) NOT NULL DEFAULT 'W', DB_VERSION VARCHAR(10) NOT NULL DEFAULT '1.0.0.0', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_BASECONFIG_GUID PRIMARY KEY(GUID), CONSTRAINT CH_TBDD_BASECONFIG_GUID CHECK(GUID = 1) ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_BASECONFIG_AFT_UPD ON TBDD_BASECONFIG FOR UPDATE AS UPDATE TBDD_BASECONFIG SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_BASECONFIG.GUID = INSERTED.GUID GO INSERT INTO TBDD_BASECONFIG (GUID,WD_UNICODE,DB_VERSION) VALUES (1,1,'1.9.7.9') GO CREATE TABLE [dbo].[TBDD_3RD_PARTY_MODULES]( [GUID] [int] IDENTITY(1,1) NOT NULL, [ACTIVE] [bit] NOT NULL, [NAME] [varchar](50) NOT NULL, [DESCRIPTION] [varchar](500) NULL, [LICENSE] [varchar](max) NOT NULL, [VERSION] [varchar](20) NOT NULL, [STRING1] [varchar](100) NULL, [STRING2] [varchar](100) NULL, [STRING3] [varchar](100) NULL, [STRING4] [varchar](100) NULL, [STRING5] [varchar](100) NULL, [STRING6] [varchar](100) NULL, [STRING7] [varchar](100) NULL, [STRING8] [varchar](100) NULL, [STRING9] [varchar](100) NULL, [STRING10] [varchar](100) NULL, [ADDED_WHO] [varchar](50) NULL, [ADDED_WHEN] [datetime] NULL, [CHANGED_WHO] [varchar](50) NULL, [CHANGED_WHEN] [datetime] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO ALTER TABLE [dbo].[TBDD_3RD_PARTY_MODULES] ADD CONSTRAINT [DF_TBDD_3RD_PARTY_MODULES_ACTIVE] DEFAULT ((0)) FOR [ACTIVE] GO ALTER TABLE [dbo].[TBDD_3RD_PARTY_MODULES] ADD CONSTRAINT [DF_TBDD_3RD_PARTY_MODULES_VERSION] DEFAULT ('1.0.0.0') FOR [VERSION] GO INSERT INTO TBDD_3RD_PARTY_MODULES (ACTIVE,NAME,LICENSE) VALUES (1,'GDPICTURE','21182889975216572111813147150675976632') GO CREATE TABLE TBDD_SERV_EXT_PROGRAMS ( GUID TINYINT, PDFTK_LOCATION VARCHAR(500) DEFAULT '', PDFXCHANGE_LOCATION VARCHAR(500) DEFAULT '', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_SERV_EXT_PROGRAMS_GUID PRIMARY KEY(GUID), CONSTRAINT CH_TBDD_SERV_EXT_PROGRAMS_GUID CHECK(GUID = 1) ) GO CREATE TABLE TBDD_EINGANGSARTEN ( GUID TINYINT IDENTITY(1,1), BEZEICHNUNG VARCHAR(100) NOT NULL, BESCHREIBUNG VARCHAR(500), ERSTELLTWER VARCHAR(50) DEFAULT 'DD_ECM DEFAULT' NOT NULL, ERSTELLTWANN DATETIME DEFAULT GETDATE(), GEANDERTWER VARCHAR(50), GEAENDERTWANN DATETIME, CONSTRAINT PK_TBDD_EINGANGSARTEN PRIMARY KEY (GUID), CONSTRAINT UNIQUE_TBDD_EINGANGSARTEN UNIQUE(BEZEICHNUNG) ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_EINGANGSARTEN_AFT_UPD ON TBDD_EINGANGSARTEN FOR UPDATE AS UPDATE TBDD_EINGANGSARTEN SET GEAENDERTWANN = GETDATE() FROM INSERTED WHERE TBDD_EINGANGSARTEN.GUID = INSERTED.GUID GO ------------------------------------------------------------------------------ INSERT INTO TBDD_EINGANGSARTEN(BEZEICHNUNG,BESCHREIBUNG) VALUES('manueller Scan','Dokumentarten die manuell gescannt werden') GO INSERT INTO TBDD_EINGANGSARTEN(BEZEICHNUNG,BESCHREIBUNG) VALUES('aus Anwendung','Dokumentarten die über Simple-Print abgelegt werden') GO INSERT INTO TBDD_EINGANGSARTEN(BEZEICHNUNG,BESCHREIBUNG) VALUES('manuelle Ablage','alle Dokumentarten die manuell abgelegt werden') GO CREATE TABLE TBDD_MODULES ( GUID INTEGER NOT NULL IDENTITY(1,1), NAME VARCHAR(50), SHORT_NAME VARCHAR(20), LICENSE VARCHAR(2000) NOT NULL DEFAULT '', PRODUCT_VERSION VARCHAR(20) NOT NULL DEFAULT '1.0.0.0', DB_VERSION VARCHAR(20) NOT NULL DEFAULT '1.0.0.0', ACTIVE BIT NOT NULL DEFAULT 0, VERSION_DELIMITER VARCHAR(1) NOT NULL DEFAULT '~', FILE_DELIMITER VARCHAR(1) NOT NULL DEFAULT '_', BIT1 BIT NOT NULL DEFAULT 0, BIT2 BIT NOT NULL DEFAULT 0, STRING1 VARCHAR(50), STRING2 VARCHAR(50), BACKGROUND_IMAGE VARBINARY(MAX), PRODUCT_NAME1 VARCHAR(200) NOT NULL DEFAULT '', PRODUCT_NAME2 VARCHAR(200), VERSION_UPATE_PATH VARCHAR(500) NOT NULL DEFAULT '', AUTO_LOGOUT_USER INTEGER NOT NULL DEFAULT 0, WMSESSION_STARTSTOP_STARTUP BIT NOT NULL DEFAULT 0, MIN_REQUIRED_VERSION VARCHAR(10) NOT NULL DEFAULT '1.0.0.0', LICENSE_VALID BIT NOT NULL DEFAULT 1, ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_MODULE PRIMARY KEY (GUID), CONSTRAINT UQ_TBDD_MODULE UNIQUE(NAME) ) GO CREATE TRIGGER TBDD_MODULE_AFT_UPD ON TBDD_MODULES FOR UPDATE AS UPDATE TBDD_MODULES SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_MODULES.GUID = INSERTED.GUID GO INSERT INTO TBDD_MODULES(NAME,SHORT_NAME,LICENSE,STRING1,ACTIVE) VALUES ('Record-Organizer','ADDI','a0c+ADsUcVQiOBrieIt5tEVrgl/P/ns5w9+A/ZdDo8k=','W',1) GO INSERT INTO TBDD_MODULES(NAME,SHORT_NAME,LICENSE,STRING1,ACTIVE) VALUES ('fileFLOW','fileFLOW','kc6j9HSv/UJVAzFjMZv2A3wHZFy+2nNLKP9Qs8g9EVY=','W',1) GO INSERT INTO TBDD_MODULES(NAME,SHORT_NAME,LICENSE,STRING1,DB_VERSION,PRODUCT_VERSION,ACTIVE) VALUES ('Process-Manager','PM','kc6j9HSv/UJVAzFjMZv2A3wHZFy+2nNLKP9Qs8g9EVY=','W','1.9.4.3','1.9.4.3',1) GO INSERT INTO TBDD_MODULES(NAME,SHORT_NAME,LICENSE,STRING1,ACTIVE) VALUES ('User-Manager','UM','kc6j9HSv/UJVAzFjMZv2A3wHZFy+2nNLKP9Qs8g9EVY=','W',1) GO INSERT INTO TBDD_MODULES(NAME,SHORT_NAME,LICENSE,STRING1,ACTIVE) VALUES ('Clipboard-Watcher','CW','kc6j9HSv/UJVAzFjMZv2A3wHZFy+2nNLKP9Qs8g9EVY=','W',1) GO INSERT INTO TBDD_MODULES(NAME,SHORT_NAME,LICENSE,STRING1,ACTIVE) VALUES ('Email-Profiler','EMLP','kc6j9HSv/UJVAzFjMZv2A3wHZFy+2nNLKP9Qs8g9EVY=','W',1) GO CREATE TABLE TBDD_USER ( GUID INTEGER IDENTITY(1,1), PRENAME VARCHAR(50), NAME VARCHAR(50), USERNAME VARCHAR(50) NOT NULL UNIQUE, SHORTNAME VARCHAR(30), EMAIL VARCHAR(100), [LANGUAGE] VARCHAR(5) NOT NULL DEFAULT 'de-DE', GENERAL_VIEWER VARCHAR(30) NOT NULL DEFAULT 'NONE', COMMENT VARCHAR(500), WAN_ENVIRONMENT BIT NOT NULL DEFAULT 0, USERID_FK_INT_ECM INTEGER NOT NULL DEFAULT 0, ATTR_CHAR1 VARCHAR(250), ATTR_CHAR2 VARCHAR(250), ATTR_CHAR3 VARCHAR(250), ATTR_CHAR4 VARCHAR(250), ATTR_CHAR5 VARCHAR(250), ATTR_CHAR6 VARCHAR(250), ATTR_CHAR7 VARCHAR(250), ATTR_CHAR8 VARCHAR(250), ATTR_CHAR9 VARCHAR(250), ATTR_CHAR10 VARCHAR(250), ATTR_CHAR11 VARCHAR(250), ATTR_CHAR12 VARCHAR(250), ATTR_CHAR13 VARCHAR(250), ATTR_CHAR14 VARCHAR(250), ATTR_CHAR15 VARCHAR(250), ATTR_BIT1 BIT NOT NULL DEFAULT 0, ATTR_BIT2 BIT NOT NULL DEFAULT 0, ATTR_BIT3 BIT NOT NULL DEFAULT 0, ATTR_BIT4 BIT NOT NULL DEFAULT 0, ACTIVE BIT NOT NULL DEFAULT 1, DELETED BIT NOT NULL DEFAULT 0, DELETED_WHEN DATETIME, DELETED_WHO DATETIME, DATE_FORMAT VARCHAR(10) NOT NULL DEFAULT 'dd.MM.yyyy', ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_USER PRIMARY KEY (GUID) ) GO INSERT INTO TBDD_USER(PRENAME,NAME,USERNAME) SELECT 'Prename','Surname',USR_NAME FROM TBIMPORT_USER; GO CREATE TABLE TBDD_GROUPS ( GUID INTEGER IDENTITY(1,1), NAME VARCHAR(50), ECM_FK_ID INTEGER NOT NULL DEFAULT 0, AD_SYNC BIT NOT NULL DEFAULT 0, INTERNAL BIT NOT NULL DEFAULT 0, ACTIVE BIT NOT NULL DEFAULT 1, COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_GROUPS PRIMARY KEY (GUID), CONSTRAINT UQ_TBDD_GROUPS UNIQUE(NAME) ) GO CREATE TRIGGER TBDD_GROUPS_AFT_UPD ON TBDD_GROUPS FOR UPDATE AS BEGIN DECLARE @GRPNAME VARCHAR(50) SELECT @GRPNAME = NAME FROM inserted IF UPDATE (NAME) BEGIN DECLARE @ECM_GRP_ID INTEGER SELECT @ECM_GRP_ID = [dwGroupID] FROM @WINDREAM_DB.[dbo].[GroupInfo] where UPPER(szGroupName) = UPPER(@GRPNAME) AND szNTDomain = '@DIGITALDATA.LOCAL' IF @ECM_GRP_ID IS NULL SET @ECM_GRP_ID = 0 UPDATE TBDD_GROUPS SET ECM_FK_ID = @ECM_GRP_ID FROM INSERTED WHERE TBDD_GROUPS.GUID = INSERTED.GUID END UPDATE TBDD_GROUPS SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_GROUPS.GUID = INSERTED.GUID END GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('PM_USER',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('PM_ADMINS',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('fileFLOW_USER',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('fileFLOW_ADMINS',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('ADDI_USER',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('ADDI_ADMINS',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('CW_USER',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('CW_ADMINS',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('UM_ADMINS',1) GO INSERT INTO TBDD_GROUPS (NAME,INTERNAL) VALUES ('SERVER_USER',1) GO CREATE TABLE TBDD_GROUPS_MODULES ( GUID INTEGER IDENTITY(1,1), MODULE_ID INT NOT NULL, GROUP_ID INT NOT NULL, COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_GROUPS_MODULES PRIMARY KEY (GUID), CONSTRAINT UC_MODULE_GROUP UNIQUE (MODULE_ID,GROUP_ID), CONSTRAINT FK_TBDD_GROUPS_MODULES_GROUP_ID FOREIGN KEY(GROUP_ID) REFERENCES TBDD_GROUPS(GUID), CONSTRAINT FK_TBDD_GROUPS_MODULES_MODULE_ID FOREIGN KEY(MODULE_ID) REFERENCES TBDD_MODULES(GUID), ) GO CREATE TABLE dbo.TBDD_USER_REPRESENTATION ( GUID INTEGER IDENTITY(1,1) NOT NULL, USER_ID INTEGER NOT NULL, REPR_GROUP INTEGER, RIGHT_GROUP INTEGER NOT NULL, ADDED_WHO VARCHAR(50) DEFAULT ('DEFAULT') NOT NULL, ADDED_WHEN DATETIME DEFAULT getdate(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, REPR_USER INTEGER, CONSTRAINT PK_TBDD_USER_REPRESENTATION PRIMARY KEY (GUID), CONSTRAINT UC_TBDD_USER_REPRESENTATION UNIQUE (USER_ID,REPR_GROUP,RIGHT_GROUP), CONSTRAINT FK_TBDD_USER_REPRESENTATION_REPR_USER FOREIGN KEY(USER_ID) REFERENCES TBDD_USER(GUID), CONSTRAINT FK_TBDD_USER_REPRESENTATION_REPR_GROUP FOREIGN KEY(REPR_GROUP) REFERENCES TBDD_GROUPS(GUID), CONSTRAINT FK_TBDD_USER_REPRESENTATION_RIGHT_GROUP FOREIGN KEY(RIGHT_GROUP) REFERENCES TBDD_GROUPS(GUID) ) GO CREATE TRIGGER TBDD_USER_REPRESENTATION_AFT_UPD ON TBDD_USER_REPRESENTATION FOR UPDATE AS BEGIN UPDATE TBDD_USER_REPRESENTATION SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_USER_REPRESENTATION.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_CLIENT ( GUID INTEGER IDENTITY(1,1), CLIENT_NAME VARCHAR(50) NOT NULL UNIQUE, SHORTNAME VARCHAR(30), LICENSE_PMO VARCHAR(5000) NOT NULL DEFAULT '', LICENSE_GI VARCHAR(5000) NOT NULL DEFAULT '', LICENSE_PM VARCHAR(5000) NOT NULL DEFAULT '', COMMENT VARCHAR(200), ACTIVE BIT NOT NULL DEFAULT 0, ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_CLIENT PRIMARY KEY (GUID) ) GO INSERT INTO TBDD_CLIENT(CLIENT_NAME,SHORTNAME,ACTIVE) VALUES ('DEFAULT','DEF',1) GO CREATE TRIGGER TBDD_CLIENT_AFT_UPD ON TBDD_CLIENT FOR UPDATE AS BEGIN UPDATE TBDD_CLIENT SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_CLIENT.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_GROUPS_CLIENT ( GUID INTEGER IDENTITY(1,1), CLIENT_ID INT NOT NULL, GROUP_ID INT NOT NULL, COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_GROUPS_CLIENT PRIMARY KEY (GUID), CONSTRAINT UC_CLIENT_GROUP UNIQUE (CLIENT_ID,GROUP_ID), CONSTRAINT FK_TBDD_GROUPS_CLIENT_GROUP_ID FOREIGN KEY(GROUP_ID) REFERENCES TBDD_GROUPS(GUID), CONSTRAINT FK_TBDD_GROUPS_CLIENT_CLIENT_ID FOREIGN KEY(CLIENT_ID) REFERENCES TBDD_CLIENT(GUID), ) GO CREATE TABLE TBDD_GROUPS_USER ( GUID INTEGER IDENTITY(1,1), [USER_ID] INT NOT NULL, GROUP_ID INT NOT NULL, COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_GROUPS_USER PRIMARY KEY (GUID), CONSTRAINT UC_USER_GROUP UNIQUE (USER_ID,GROUP_ID), CONSTRAINT FK_TBDD_GROUPS_USER_GROUP_ID FOREIGN KEY(GROUP_ID) REFERENCES TBDD_GROUPS(GUID), CONSTRAINT FK_TBDD_GROUPS_USER_USER_ID FOREIGN KEY([USER_ID]) REFERENCES TBDD_USER(GUID), ) GO CREATE TRIGGER TBDD_GROUPS_USER_AFT_UPD ON TBDD_GROUPS_USER FOR UPDATE AS UPDATE TBDD_GROUPS_USER SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_GROUPS_USER.GUID = INSERTED.GUID GO CREATE TRIGGER [dbo].[TBDD_GROUPS_USER_AFT_DEL] ON [dbo].[TBDD_GROUPS_USER] FOR DELETE AS DECLARE @USER_ID INTEGER SELECT @USER_ID = deleted.USER_ID FROM deleted IF @USER_ID IS NOT NULL BEGIN if exists (select * from sysobjects where name='TBPMO_USER_RIGHTS_JOBS' and xtype='U') INSERT INTO TBPMO_USER_RIGHTS_JOBS (USER_ID,COMMENT,ADDED_WHO) VALUES (@USER_ID,'USER DELETED FROM GROUP','TBDD_GROUPS_USER_AFT_DEL') if exists (select * from sysobjects where name='TBPMO_LOG_ESSENTIALS' and xtype='U') INSERT INTO TBPMO_LOG_ESSENTIALS (REFERENCE_KEY,REFERENCE_STRING,COMMENT,ADDED_WHO) VALUES (@USER_ID,'USER-ID','USER DELETED FROM USER-GROUP',(SELECT USERNAME FROM TBDD_USER WHERE GUID = @USER_ID )) END GO CREATE TABLE TBDD_FUNCTION_REGEX ( GUID INTEGER IDENTITY(1,1), FUNCTION_NAME VARCHAR(250) NOT NULL, REGEX VARCHAR(MAX) NOT NULL, STRING1 VARCHAR(500), STRING2 VARCHAR(500), ADDED_WHO VARCHAR(50) DEFAULT 'Digital Data', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_FUNCTION_REGEX PRIMARY KEY (GUID) ) GO CREATE TRIGGER TBTBDD_FUNCTION_REGEX_AFT_UPD ON TBDD_FUNCTION_REGEX FOR UPDATE AS UPDATE TBDD_FUNCTION_REGEX SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_FUNCTION_REGEX.GUID = INSERTED.GUID GO INSERT INTO TBDD_FUNCTION_REGEX(FUNCTION_NAME,REGEX) VALUES ('FROM_EMAIL_HEADER','From:(?:\s*[\w\s\d.@&,|+%\)\(\-]*<|\s*=\?[\w\s\d.@&,|+%?=\)\(\-]+\?=\s*<|\s*""[\w\s\d.@&,|+%\)\(\-]+""\s*<|\s*)([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})>?') GO INSERT INTO TBDD_FUNCTION_REGEX(FUNCTION_NAME,REGEX) VALUES ('TO_EMAIL_HEADER','To:(?:\s*[\w\s\d.@&,|+%\)\(\-]+<|\s*=\?[\w\s\d.@&,|+%?=\)\(\-]+\?=\s*<|\s*""[\w\s\d.@&,|+%\)\(\-]+""\s*<|\s*)([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,})>?') GO INSERT INTO TBDD_FUNCTION_REGEX(FUNCTION_NAME,REGEX) VALUES ('EMAIL_PROFILER - BODY REMOVE NewLine','[^\s]([\w\s\!\§\$\%\&\/\(\)\=\?\[\]\,\.\-\–\:\;\<\>\@\r\n\#]{1,})^[\#]{2}') GO CREATE TABLE TBDD_LANGUAGE_OBJECTS ( GUID VARCHAR(50) NOT NULL, MODULE_ID INTEGER NOT NULL, FORM_NAME VARCHAR(100) NOT NULL, [LANGUAGE] VARCHAR(20), CONTENT VARCHAR(MAX), COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_LANGUAGE_OBJECTS PRIMARY KEY (GUID), CONSTRAINT FK_TBDD_LANGUAGE_OBJECTS_MODULE_ID FOREIGN KEY(MODULE_ID) REFERENCES TBDD_MODULES(GUID), ) GO CREATE TRIGGER TBDD_LANGUAGE_OBJECTS_AFT_UPD ON TBDD_LANGUAGE_OBJECTS FOR UPDATE AS UPDATE TBDD_LANGUAGE_OBJECTS SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_LANGUAGE_OBJECTS.GUID = INSERTED.GUID GO CREATE TABLE TBDD_VERSION_USER_UPDATE_PATH( GUID INTEGER NOT NULL IDENTITY(1,1), USER_ID INT NOT NULL, MODULE_NAME VARCHAR(30) NOT NULL, UPDATE_PATH VARCHAR(500) NOT NULL DEFAULT '', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHEN DATETIME DEFAULT GETDATE(), CONSTRAINT [PK_TBDD_VERSION_USER_UPDATE_PATH] PRIMARY KEY(GUID)) GO CREATE TRIGGER TBDD_VERSION_USER_UPDATE_PATH_AFT_UPD ON TBDD_VERSION_USER_UPDATE_PATH FOR UPDATE AS UPDATE TBDD_VERSION_USER_UPDATE_PATH SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_VERSION_USER_UPDATE_PATH.GUID = INSERTED.GUID GO CREATE TABLE TBDD_VERSION_UPDATE( GUID INTEGER NOT NULL IDENTITY(1,1), ALL_USERS BIT NOT NULL DEFAULT 0, FORCE_UPD BIT NOT NULL DEFAULT 0, MODULE_NAME VARCHAR(30) NOT NULL, VERSION_NO VARCHAR(20) NOT NULL, VERSION_FORCE_UPD VARCHAR(100) NOT NULL DEFAULT '', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHEN DATETIME DEFAULT GETDATE(), CONSTRAINT [PK_TBDD_VERSION_UPDATE] PRIMARY KEY(GUID)) GO CREATE TRIGGER [dbo].[TBDD_VERSION_UPDATE_AFT_UPD] ON [dbo].[TBDD_VERSION_UPDATE] FOR UPDATE AS BEGIN TRY DECLARE @UPDATE_ID INTEGER, @USER_ID INTEGER, @ALL_USERS INT SELECT @UPDATE_ID = GUID FROM INSERTED IF UPDATE (ALL_USERS) BEGIN SELECT @ALL_USERS = ALL_USERS FROM INSERTED DELETE FROM TBDD_VERSION_USER_UPDATE WHERE UPDATE_ID = @UPDATE_ID IF @ALL_USERS = 1 BEGIN DECLARE cursorUsers CURSOR FOR select GUID FROM TBDD_USER OPEN cursorUsers FETCH NEXT FROM cursorUsers INTO @USER_ID WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO TBDD_VERSION_USER_UPDATE (USER_ID, UPDATE_ID) VALUES (@USER_ID,@UPDATE_ID) FETCH NEXT FROM cursorUsers INTO @USER_ID END CLOSE cursorUsers DEALLOCATE cursorUsers END END --Generelle Updates (Datum und Recor-Änderungen) UPDATE TBDD_VERSION_UPDATE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_VERSION_UPDATE.GUID = INSERTED.GUID END TRY BEGIN CATCH PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ERROR-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO CREATE TABLE TBDD_VERSION_ITEMS( GUID INTEGER NOT NULL IDENTITY(1,1), UPDATE_ID INTEGER NOT NULL, ITEM_INFO VARCHAR(100) NOT NULL, INFO1 VARCHAR(100), INFO2 VARCHAR(100), INFO3 VARCHAR(100), BIT1 BIT NOT NULL DEFAULT 0, BIT2 BIT NOT NULL DEFAULT 0, BIT3 BIT NOT NULL DEFAULT 0, COMMENT VARCHAR(250), ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHEN DATETIME DEFAULT GETDATE(), CONSTRAINT [PK_TBDD_VERSION_ITEMS] PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_VERSION_ITEMS_UPDATE_ID FOREIGN KEY (UPDATE_ID) REFERENCES TBDD_VERSION_UPDATE (GUID)) GO CREATE TABLE TBDD_VERSION_USER_UPDATE( GUID INTEGER NOT NULL IDENTITY(1,1), [USER_ID] INTEGER NOT NULL, UPDATE_ID INTEGER NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHEN DATETIME DEFAULT GETDATE(), CONSTRAINT [PK_TBDD_VERSION_USER_UPDATE] PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_VERSION_USER_UPDATE_UPDATE_ID FOREIGN KEY (UPDATE_ID) REFERENCES TBDD_VERSION_UPDATE (GUID)) GO CREATE OR ALTER TRIGGER [dbo].[TBDD_USER_AFT_INS] ON [dbo].[TBDD_USER] WITH EXECUTE AS CALLER FOR INSERT AS BEGIN TRY DECLARE @USER_ID INTEGER, @CLIENT_ID INTEGER, @ADDED_WHO VARCHAR(50), @CLIENT_COUNT INTEGER, @ECM_USR_ID INTEGER, @USRNAME VARCHAR(50), @UPDATE_PATH VARCHAR(500) SELECT @USER_ID = GUID, @ADDED_WHO = ADDED_WHO, @USRNAME = USERNAME FROM INSERTED SELECT @ECM_USR_ID = [dwUserID] FROM @WINDREAM_DB.[dbo].[UserInfo] where UPPER(szUserName) = UPPER(@USRNAME) IF @ECM_USR_ID IS NOT NULL UPDATE TBDD_USER SET USERID_FK_INT_ECM = @ECM_USR_ID FROM INSERTED WHERE TBDD_USER.GUID = INSERTED.GUID --EXEC IDB.dbo.PRIDB_NEW_CATALOG_USER @USER_ID; -- SELECT @CLIENT_COUNT = COUNT(*) FROM TBDD_CLIENT -- IF @CLIENT_COUNT = 1 -- BEGIN -- SELECT @CLIENT_COUNT = GUID FROM TBDD_CLIENT -- INSERT INTO TBDD_CLIENT_USER (USER_ID,CLIENT_ID,ADDED_WHO) VALUES -- (@USER_ID,@CLIENT_COUNT,@ADDED_WHO) -- END -- --INSERT INTO TBDD_USER_MODULES (USER_ID,MODULE_ID) VALUES (@USER_ID,3) -- END END TRY BEGIN CATCH PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ERROR-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO CREATE TRIGGER TBDD_USER_AFT_UPD ON TBDD_USER FOR UPDATE AS BEGIN DECLARE @USRNAME VARCHAR(50) SELECT @USRNAME = USERNAME FROM inserted IF UPDATE (USERNAME) BEGIN DECLARE @ECM_USR_ID INTEGER SELECT @ECM_USR_ID = [dwUserID] FROM @WINDREAM_DB.[dbo].[UserInfo] where UPPER(szUserName) = UPPER(@USRNAME) IF @ECM_USR_ID IS NOT NULL UPDATE TBDD_USER SET USERID_FK_INT_ECM = @ECM_USR_ID FROM INSERTED WHERE TBDD_USER.GUID = INSERTED.GUID END UPDATE TBDD_USER SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_USER.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_CLIENT_USER ( GUID INTEGER IDENTITY(1,1), [USER_ID] INT NOT NULL, CLIENT_ID INT NOT NULL, COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT', ADDED_WHEN DATETIME DEFAULT GETDATE(), CONSTRAINT PK_TBDD_CLIENT_USER PRIMARY KEY (GUID), CONSTRAINT FK_TBDD_CLIENT_USER_GROUP_ID FOREIGN KEY(CLIENT_ID) REFERENCES TBDD_CLIENT(GUID), CONSTRAINT FK_TBDD_CLIENT_USER_USER_ID FOREIGN KEY([USER_ID]) REFERENCES TBDD_USER(GUID), ) GO CREATE TABLE TBDD_CLIENT_GROUP ( GUID INTEGER IDENTITY(1,1), [GROUP_ID] INT NOT NULL, CLIENT_ID INT NOT NULL, COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT', ADDED_WHEN DATETIME DEFAULT GETDATE(), CONSTRAINT PK_TBDD_CLIENT_GROUP PRIMARY KEY (GUID), CONSTRAINT FK_TBDD_CLIENT_GROUP_GROUP_ID FOREIGN KEY(GROUP_ID) REFERENCES TBDD_GROUPS(GUID), CONSTRAINT FK_TBDD_CLIENT_GROUP_CLIENT_ID FOREIGN KEY(CLIENT_ID) REFERENCES TBDD_CLIENT(GUID), ) GO CREATE TABLE TBDD_USER_MODULES ( GUID INTEGER IDENTITY(1,1), [USER_ID] INT NOT NULL, MODULE_ID INT NOT NULL, IS_ADMIN BIT NOT NULL DEFAULT 0, RIGHT1 BIT NOT NULL DEFAULT 0, RIGHT2 BIT NOT NULL DEFAULT 0, RIGHT3 BIT NOT NULL DEFAULT 0, RIGHT4 BIT NOT NULL DEFAULT 0, COMMENT VARCHAR(200), ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME , CONSTRAINT PK_TBDD_USER_MODULES PRIMARY KEY (GUID), CONSTRAINT UQ_TBDD_USER_MODULES UNIQUE([USER_ID],MODULE_ID), CONSTRAINT FK_TBDD_USER_MODULES_MODULE_ID FOREIGN KEY(MODULE_ID) REFERENCES TBDD_MODULES(GUID), CONSTRAINT FK_TBDD_USER_MODULES2_USER_ID FOREIGN KEY([USER_ID]) REFERENCES TBDD_USER(GUID), ) GO CREATE TRIGGER TBDD_USER_MODULES_AFT_UPD ON TBDD_USER_MODULES FOR UPDATE AS UPDATE TBDD_USER_MODULES SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_USER_MODULES.GUID = INSERTED.GUID GO INSERT INTO TBDD_USER_MODULES (USER_ID,MODULE_ID,IS_ADMIN) SELECT GUID,(SELECT GUID FROM TBDD_MODULES WHERE SHORT_NAME = 'UM'),1 FROM TBDD_USER where GUID NOT IN ( SELECT USER_ID FROM TBDD_USER_MODULES WHERE MODULE_ID = (SELECT GUID FROM TBDD_MODULES WHERE SHORT_NAME = 'UM')) GO CREATE TRIGGER [dbo].[TBDD_USER_AFT_DEL] ON [dbo].[TBDD_USER] FOR DELETE AS DECLARE @USER_ID INTEGER BEGIN SELECT @USER_ID = GUID FROM DELETED IF @USER_ID IN (0,1) BEGIN ROLLBACK TRANSACTION RAISERROR('THIS USER CAN NOT BE DELETED!',16,10) END ELSE BEGIN INSERT INTO TBPMO_USER_RIGHTS_JOBS (USER_ID,COMMENT,ADDED_WHO) VALUES (@USER_ID,'USER DELETED','TBDD_GROUPS_USER_AFT_DEL') END END GO CREATE TABLE TBDD_USER_MODULE_LOG_IN ( GUID INTEGER IDENTITY(1,1), CLIENT_ID INTEGER NOT NULL DEFAULT 0, CONNECTION_STRING VARCHAR(500) NOT NULL DEFAULT '' , USER_ID INTEGER NOT NULL, MACHINE_NAME VARCHAR(250) NOT NULL DEFAULT '', MODULE VARCHAR(50), VERSION_CLIENT VARCHAR(30), ADDED_WHEN DATETIME DEFAULT GETDATE() NOT NULL, CONSTRAINT PK_TBDD_USER_MODULE_LOG_IN PRIMARY KEY (GUID) ) GO CREATE TRIGGER TBDD_USER_MODULE_LOG_IN_AFT_INS ON TBDD_USER_MODULE_LOG_IN WITH EXECUTE AS CALLER FOR INSERT AS BEGIN TRY DECLARE @USER_ID INTEGER, @MODULE VARCHAR(50), @CLIENT_ID INTEGER, @VERSION_CLIENT VARCHAR(30), @MACHINE_NAME VARCHAR(50), @CONNECTION_STRING VARCHAR(500) SELECT @USER_ID = USER_ID, @MODULE = MODULE, @CLIENT_ID = CLIENT_ID, @VERSION_CLIENT = VERSION_CLIENT, @MACHINE_NAME = MACHINE_NAME, @CONNECTION_STRING = CONNECTION_STRING FROM INSERTED IF @VERSION_CLIENT IS NULL SET @VERSION_CLIENT = '1.0.0.0' INSERT INTO TBDD_USER_LOGIN_OUT (MODULE,USER_ID,CLIENT_ID,VERSION_CLIENT,MACHINE_NAME,CONNECTION_STRING) VALUES (@MODULE,@USER_ID,@CLIENT_ID,@VERSION_CLIENT,@MACHINE_NAME,@CONNECTION_STRING) END TRY BEGIN CATCH PRINT 'FEHLER IN TRIGGER: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ZEILE: ' + CONVERT(VARCHAR(10),ERROR_LINE()) + ' - FEHLER-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO CREATE TRIGGER TBDD_USER_MODULE_LOG_IN_AFT_DEL ON TBDD_USER_MODULE_LOG_IN FOR DELETE AS BEGIN TRY DECLARE @USER_ID INTEGER, @MODULE VARCHAR(50), @CLIENT_ID INTEGER SELECT @USER_ID = USER_ID, @MODULE = MODULE, @CLIENT_ID = CLIENT_ID FROM DELETED UPDATE TBDD_USER_LOGIN_OUT SET LOGOUT = GETDATE() WHERE GUID = ( SELECT MAX(GUID) FROM TBDD_USER_LOGIN_OUT WHERE USER_ID = @USER_ID AND MODULE = @MODULE AND CLIENT_ID = @CLIENT_ID) END TRY BEGIN CATCH PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ERROR-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO CREATE TABLE TBDD_CONNECTION ( GUID SMALLINT IDENTITY(1,1), BEZEICHNUNG VARCHAR(100), SQL_PROVIDER VARCHAR(50), SERVER VARCHAR(150), DATENBANK VARCHAR(100), USERNAME VARCHAR(100), PASSWORD VARCHAR(100), BEMERKUNG VARCHAR(400), SYS_CONNECTION BIT DEFAULT 0 NOT NULL, AKTIV BIT DEFAULT 1 NOT NULL, -- 1 - Connection aktiv, 0 - inaktiv ERSTELLTWER VARCHAR(50) DEFAULT 'DD_ECM DEFAULT' NOT NULL, ERSTELLTWANN DATETIME DEFAULT GETDATE(), GEANDERTWER VARCHAR(50), GEAENDERTWANN DATETIME, CONSTRAINT PK_TBDD_CONNECTION PRIMARY KEY (GUID) ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_CONNECTION_AFT_UPD ON TBDD_CONNECTION FOR UPDATE AS UPDATE TBDD_CONNECTION SET GEAENDERTWANN = GETDATE() FROM INSERTED WHERE TBDD_CONNECTION.GUID = INSERTED.GUID GO ------------------------------------------------------------------------------ INSERT INTO TBDD_CONNECTION(BEZEICHNUNG,SQL_PROVIDER,SERVER,DATENBANK,USERNAME,PASSWORD) VALUES ('DD_ECM','MS-SQL','@ECM_IP','DD_ECM','@ECM_USER','@ECM_PW') GO INSERT INTO TBDD_CONNECTION(BEZEICHNUNG,SQL_PROVIDER,SERVER,DATENBANK,USERNAME,PASSWORD) VALUES ('IDB','MS-SQL','@ECM_IP','DD_ECM','@ECM_USER','@ECM_PW') GO --INSERT INTO TBCONNECTION(BEZEICHNUNG,SQL_PROVIDER,SERVER,DATENBANK,USERNAME,PASSWORD) VALUES ('Zeiterfassung','SQLOLEDB','192.168.48.13','DD_ZEITERFASSUNG_AB_112011','sa','dd') --GO --INSERT INTO TBCONNECTION(BEZEICHNUNG,SQL_PROVIDER,SERVER,DATENBANK,USERNAME,PASSWORD) VALUES ('Oracle-Fuchs','OraOLEDB.Oracle','192.168.48.32','10FUCHS','IID_GH','dd') --GO CREATE TABLE TBDD_DOKUMENTART ( GUID INT IDENTITY(1,1), BEZEICHNUNG VARCHAR(50) NOT NULL, OBJEKTTYP VARCHAR(50) NOT NULL, EINGANGSART_ID TINYINT NOT NULL, -- Typ der die Entstehung der dokumnetart beschreibt KURZNAME VARCHAR(50) NOT NULL, ZIEL_PFAD VARCHAR(250) NOT NULL, BESCHREIBUNG VARCHAR(250), WINDREAM_DIRECT BIT DEFAULT 0 NOT NULL, FOLDER_FOR_INDEX VARCHAR(500) DEFAULT '' NOT NULL, DUPLICATE_HANDLING VARCHAR(30) NOT NULL DEFAULT 'Default', AKTIV BIT DEFAULT 0 NOT NULL, -- 1 - Dokumentart aktiv und kann benutzt werden, 0 - inaktiv [LANGUAGE] VARCHAR(5) NOT NULL DEFAULT 'de-DE', SEQUENCE INT NOT NULL DEFAULT 1, IDB_OBJECT_STORE_ID INT DEFAULT 0 NOT NULL, NAMENKONVENTION VARCHAR(500) NOT NULL DEFAULT '', ERSTELLTWER VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ERSTELLTWANN DATETIME DEFAULT GETDATE(), GEANDERTWER VARCHAR(50), GEAENDERTWANN DATETIME, CONSTRAINT PK_TBDD_DOKUMENTART PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_DOKUMENTART_EINGID FOREIGN KEY(EINGANGSART_ID) REFERENCES TBDD_EINGANGSARTEN(GUID), CONSTRAINT UNIQUE_TBDD_DOKUMENTART UNIQUE(BEZEICHNUNG) ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_DOKUMENTART_AFT_UPD ON TBDD_DOKUMENTART FOR UPDATE AS BEGIN TRY DECLARE @DA_TITLE VARCHAR(50), @LANGUAGE VARCHAR(5), @CHANGED_WHO VARCHAR(50), @GUID INTEGER, @SCREEN_ID INTEGER, @PMO_OBJECT_NAME VARCHAR(100) SELECT @GUID = GUID, @DA_TITLE = BEZEICHNUNG, @SCREEN_ID = 1, @CHANGED_WHO = GEANDERTWER FROM INSERTED SELECT @LANGUAGE = [LANGUAGE] FROM TBDD_USER WHERE UPPER(USERNAME) = UPPER(@CHANGED_WHO) SET @PMO_OBJECT_NAME = 'DOCTYPE_TITLE' + CONVERT(VARCHAR(5),@GUID) UPDATE TBDD_DOKUMENTART SET GEAENDERTWANN = GETDATE() FROM INSERTED WHERE TBDD_DOKUMENTART.GUID = INSERTED.GUID IF UPDATE (BEZEICHNUNG) BEGIN IF OBJECT_ID(N'dbo.TBPMO_WD_OBJECTTYPE', N'U') IS NOT NULL BEGIN If exists(SELECT * FROM TBPMO_LANGUAGE_OBJECT WHERE PMO_OBJECT_NAME = @PMO_OBJECT_NAME AND LANGUAGE_TYPE = @LANGUAGE AND SCREEN_ID = @SCREEN_ID) UPDATE TBPMO_LANGUAGE_OBJECT SET CAPTION = @DA_TITLE,CHANGED_WHO = @CHANGED_WHO WHERE PMO_OBJECT_NAME = @PMO_OBJECT_NAME AND LANGUAGE_TYPE = @LANGUAGE AND SCREEN_ID = @SCREEN_ID ELSE INSERT INTO TBPMO_LANGUAGE_OBJECT (LANGUAGE_TYPE,SCREEN_ID,PMO_OBJECT_NAME,CAPTION) VALUES (@LANGUAGE,@SCREEN_ID,@PMO_OBJECT_NAME,@DA_TITLE) END END END TRY BEGIN CATCH PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ERROR-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO CREATE TRIGGER [dbo].[TBDD_DOKUMENTART_AFT_INS] ON [dbo].[TBDD_DOKUMENTART] WITH EXECUTE AS CALLER FOR INSERT AS BEGIN TRY DECLARE @DA_TITLE VARCHAR(50), @LANGUAGE VARCHAR(5), @ADDED_WHO VARCHAR(50), @GUID INTEGER, @SCREEN_ID INTEGER, @PMO_OBJECT_NAME VARCHAR(100) SELECT @GUID = GUID, @DA_TITLE = BEZEICHNUNG, @LANGUAGE = [LANGUAGE], @SCREEN_ID = 1, @ADDED_WHO = ERSTELLTWER FROM INSERTED SET @PMO_OBJECT_NAME = 'DOCTYPE_TITLE' + CONVERT(VARCHAR(5),@GUID) IF OBJECT_ID(N'dbo.TBPMO_WD_OBJECTTYPE', N'U') IS NOT NULL INSERT INTO TBPMO_LANGUAGE_OBJECT (LANGUAGE_TYPE,SCREEN_ID,PMO_OBJECT_NAME,CAPTION,ADDED_WHO) VALUES (@LANGUAGE,@SCREEN_ID,@PMO_OBJECT_NAME,@DA_TITLE,@ADDED_WHO) END TRY BEGIN CATCH PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ERROR-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO CREATE TRIGGER TBDD_DOKUMENTART_AFT_INS2 ON TBDD_DOKUMENTART WITH EXECUTE AS CALLER FOR INSERT AS BEGIN TRY DECLARE @ADDED_WHO VARCHAR(50), @OBJEKTTYP VARCHAR(50), @GUID INTEGER SELECT @GUID = GUID, @ADDED_WHO = ERSTELLTWER, @OBJEKTTYP = OBJEKTTYP FROM INSERTED IF OBJECT_ID(N'dbo.TBPMO_CLIENT_DOCTYPE', N'U') IS NOT NULL INSERT INTO TBPMO_CLIENT_DOCTYPE (CLIENT_ID,DOCTYPE_ID) SELECT T.CLIENT_ID,@GUID FROM TBDD_CLIENT_USER T, TBDD_USER T1 WHERE T.USER_ID = T1.GUID AND UPPER(T1.USERNAME) = UPPER(@ADDED_WHO) IF OBJECT_ID(N'dbo.TBPMO_WD_OBJECTTYPE', N'U') IS NOT NULL IF @OBJEKTTYP IS NOT NULL IF @OBJEKTTYP <> '' BEGIN DECLARE @IDX_DOC VARCHAR(50),@IDX_REC VARCHAR(50) SELECT @IDX_DOC = IDXNAME_DOCTYPE, @IDX_REC = IDXNAME_RECORDID FROM TBPMO_WD_OBJECTTYPE WHERE OBJECT_TYPE = @OBJEKTTYP IF @IDX_REC IS NOT NULL INSERT INTO TBDD_INDEX_AUTOM (DOCTYPE_ID,INDEXNAME,VALUE,ACTIVE,ADDED_WHO) VALUES (@GUID,@IDX_REC,'@Record-ID',1,@ADDED_WHO) IF @IDX_DOC IS NOT NULL INSERT INTO TBDD_INDEX_AUTOM (DOCTYPE_ID,INDEXNAME,VALUE,ACTIVE,ADDED_WHO) VALUES (@GUID,@IDX_DOC,'@Dokart',1,@ADDED_WHO) END END TRY BEGIN CATCH PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ERROR-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) END CATCH GO CREATE TABLE TBDD_DOKUMENTART_MODULE ( GUID INT IDENTITY(1,1), DOKART_ID INT NOT NULL, MODULE_ID INT NOT NULL, ADDED_WHO VARCHAR(50) DEFAULT 'Digital Data' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHEN DATETIME, CONSTRAINT PKTBDD_DOKART_MODULE PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_DOKART_MODULE_DOKART_ID FOREIGN KEY(DOKART_ID) REFERENCES TBDD_DOKUMENTART(GUID), CONSTRAINT FK_TBDD_DOKART_MODULE_MODULE_ID FOREIGN KEY(MODULE_ID) REFERENCES TBDD_MODULES(GUID), ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_DOKUMENTART_MODULE_AFT_UPD ON TBDD_DOKUMENTART_MODULE FOR UPDATE AS BEGIN UPDATE TBDD_DOKUMENTART_MODULE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_DOKUMENTART_MODULE.GUID = INSERTED.GUID END GO ------------------------------------------------------------------------------ CREATE TABLE TBDD_USER_DOKTYPE ( GUID INT IDENTITY(10000,1), DOCTYPE_ID INT NOT NULL, USER_ID INT NOT NULL, ADDED_WHO VARCHAR(50) DEFAULT 'Digital Data' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHEN DATETIME, CONSTRAINT PKTBDD_USER_DOKTYPE PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_USER_DOKTYPE_DTID FOREIGN KEY(DOCTYPE_ID) REFERENCES TBDD_DOKUMENTART(GUID), CONSTRAINT FK_TBDD_USER_DOKTYPE_USRID FOREIGN KEY(USER_ID) REFERENCES TBDD_USER(GUID), ) GO CREATE TRIGGER TBDD_USER_DOKTYPE_AFT_UPD ON TBDD_USER_DOKTYPE FOR UPDATE AS BEGIN UPDATE TBDD_USER_DOKTYPE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_USER_DOKTYPE.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_INDEX_MAN ( GUID INT IDENTITY(1,1), DOK_ID INT NOT NULL, NAME VARCHAR(50) NOT NULL, WD_INDEX VARCHAR(50), --SAVE_VALUE BIT NOT NULL DEFAULT 0, COMMENT VARCHAR(150), DATATYPE VARCHAR(50), SUGGESTION BIT DEFAULT 0 NOT NULL, -- 1 - Es wird Eingabe vorgeschlagen, bei 0 - manuelle Eingabe. DEFAULT_VALUE VARCHAR(50) NOT NULL DEFAULT '', CONNECTION_ID SMALLINT DEFAULT 0, SEQUENCE INTEGER NOT NULL DEFAULT 1, SQL_RESULT VARCHAR(2000) NOT NULL DEFAULT '', SQL_CHECK VARCHAR(2000) NOT NULL DEFAULT '', OPTIONAL BIT DEFAULT 0 NOT NULL, SAVE_VALUE BIT DEFAULT 0 NOT NULL, VKT_ADD_ITEM BIT NOT NULL DEFAULT 0, VKT_PREVENT_MULTIPLE_VALUES BIT NOT NULL DEFAULT 1, MULTISELECT BIT NOT NULL DEFAULT 0, ACTIVE BIT DEFAULT 1 NOT NULL, -- 1 - Index aktiv, bei 0 - inaktiv. ADDED_WHO VARCHAR(50) DEFAULT 'DD_ECM DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE() , CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_INDEX_MAN PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_INDEX_MAN_DAID FOREIGN KEY(DOK_ID) REFERENCES TBDD_DOKUMENTART(GUID), CONSTRAINT FK_TBDD_INDEX_MAN_CID FOREIGN KEY(CONNECTION_ID) REFERENCES TBDD_CONNECTION(GUID) ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBINDEX_MAN_AFT_UPD ON TBDD_INDEX_MAN FOR UPDATE AS BEGIN UPDATE TBDD_INDEX_MAN SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_INDEX_MAN.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_INDEX_AUTOM ( GUID INT IDENTITY(1,1), DOCTYPE_ID INT NOT NULL, [ENTITY_ID] INTEGER DEFAULT 0 NOT NULL, INDEXNAME VARCHAR(50) NOT NULL, [VALUE] VARCHAR(2000), CONNECTION_ID SMALLINT NOT NULL DEFAULT 0, [SQL_RESULT] VARCHAR(2000) DEFAULT '' NOT NULL, SQL_ACTIVE BIT DEFAULT 0 NOT NULL, VKT_PREVENT_MULTIPLE_VALUES BIT DEFAULT 0, VKT_OVERWRITE BIT DEFAULT 0, COMMENT VARCHAR(400), ACTIVE BIT DEFAULT 1 NOT NULL, -- 1 - Index aktiv, bei 0 - inaktiv. SEQUENCE INT DEFAULT 1 NOT NULL, ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE() , CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_INDEX_AUTOM PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_INDEX_AUTOM_DOCID FOREIGN KEY(DOCTYPE_ID) REFERENCES TBDD_DOKUMENTART(GUID) ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_INDEX_AUTOM_AFT_UPD ON TBDD_INDEX_AUTOM FOR UPDATE AS BEGIN UPDATE TBDD_INDEX_AUTOM SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_INDEX_AUTOM.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_INDEX_MAN_POSTPROCESSING ( GUID INT IDENTITY(1,1), IDXMAN_ID INT NOT NULL, VARIANT VARCHAR(20) NOT NULL DEFAULT 'FILE AND INDEX', COMMENT VARCHAR(250), [TYPE] VARCHAR(50), -- Beschreibt intern welche Funktion genutzt wird:SPLIT,REPLACE FUNCTION1 VARCHAR(250), -- Funktionen wie RegexExpressions FUNCTION2 VARCHAR(250), -- Funktionen wie RegexExpressions TEXT1 VARCHAR(100), -- Option1 zB: Replace1 TEXT2 VARCHAR(100), -- Option2 zB: Replace_with TEXT3 VARCHAR(100), -- Option2 SEQUENCE INT NOT NULL DEFAULT 1, ADDED_WHO VARCHAR(50) DEFAULT 'Digital Data' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PKTBDD_INDEX_MAN_POSTPROCESSING PRIMARY KEY(GUID), CONSTRAINT FKTBDD_INDEX_MAN_POSTPROCESSING_IDXID FOREIGN KEY(IDXMAN_ID) REFERENCES TBDD_INDEX_MAN(GUID) ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_INDEX_MAN_POSTPROCESSING_AFT_UPD ON TBDD_INDEX_MAN_POSTPROCESSING FOR UPDATE AS UPDATE TBDD_INDEX_MAN_POSTPROCESSING SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_INDEX_MAN_POSTPROCESSING.GUID = INSERTED.GUID GO CREATE TABLE TBDD_EMAIL_ACCOUNT ( GUID INTEGER IDENTITY(1,1), NAME VARCHAR(50), EMAIL_NAME VARCHAR(100) DEFAULT '', EMAIL_FROM VARCHAR(100) NOT NULL, EMAIL_FROM_NAME VARCHAR(100) DEFAULT '', EMAIL_SMTP VARCHAR(100) NOT NULL, EMAIL_USER VARCHAR(100) NOT NULL, EMAIL_PW VARCHAR(250) NOT NULL DEFAULT '', AUTH_TYPE VARCHAR(20) NOT NULL DEFAULT 'SSL', SSL_AUTH BIT NOT NULL DEFAULT 0, PORT INTEGER NOT NULL DEFAULT '25', PORT_IN INT NOT NULL DEFAULT 25, ACTIVE BIT NOT NULL DEFAULT 1, ADDED_WHO VARCHAR(50) DEFAULT 'DEFAULT', ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_EMAIL_ACCOUNT PRIMARY KEY (GUID) ) GO CREATE TRIGGER TBDD_EMAIL_ACCOUNT_AFT_UPD ON TBDD_EMAIL_ACCOUNT FOR UPDATE AS BEGIN UPDATE TBDD_EMAIL_ACCOUNT SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_EMAIL_ACCOUNT.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_USER_LOGIN_OUT( GUID INT IDENTITY(1,1) NOT NULL, CONNECTION_STRING VARCHAR(500) NOT NULL DEFAULT '', CLIENT_ID INT NOT NULL, MACHINE_NAME VARCHAR(250) NOT NULL DEFAULT '', MODULE VARCHAR(30) NOT NULL, [USER_ID] INT NOT NULL, VERSION_CLIENT VARCHAR(30), [LOGIN] DATETIME DEFAULT (GETDATE()), [LOGOUT] DATETIME, CONSTRAINT [PK_TBDD_USER_LOGIN_OUT] PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_USER_LOGIN_OUT_USER_ID FOREIGN KEY ([USER_ID]) REFERENCES TBDD_USER (GUID)) GO CREATE TABLE TBDD_USRGRP_DOKTYPE ( GUID INT IDENTITY(100,1), DOCTYPE_ID INT NOT NULL, GROUP_ID INT NOT NULL, ADDED_WHO VARCHAR(50) DEFAULT 'Digital Data' NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHEN DATETIME, CONSTRAINT PKTBDD_USRGRP_DOKTYPE PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_USRGRP_DOKTYPE_DOCTYPE_ID FOREIGN KEY(DOCTYPE_ID) REFERENCES TBDD_DOKUMENTART(GUID), CONSTRAINT FK_TBDD_USRGRP_DOKTYPE_GROUP_ID FOREIGN KEY(GROUP_ID) REFERENCES TBDD_GROUPS(GUID), ) GO ------------------------------------------------------------------------------ CREATE TRIGGER TBDD_USRGRP_DOKTYPE_AFT_UPD ON TBDD_USRGRP_DOKTYPE FOR UPDATE AS BEGIN UPDATE TBDD_USRGRP_DOKTYPE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_USRGRP_DOKTYPE.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_LICENSE_ADD_ON( [GUID] INT IDENTITY(1,1) NOT NULL, [CLIENT_ID] INT NOT NULL, [MODULE] VARCHAR(100) NOT NULL, [NAME] VARCHAR(100) NOT NULL, [VALID_DATE] VARCHAR(2000) NOT NULL, [ADDED_WHO] VARCHAR(50) NOT NULL DEFAULT ('DEFAULT'), [ADDED_WHEN] DATETIME DEFAULT (getdate()), [CHANGED_WHO] VARCHAR(50), [CHANGED_WHEN] DATETIME CONSTRAINT [PK_TBDD_LICENSE_ADD_ON] PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_LICENSE_ADD_ON_CLIENT_ID FOREIGN KEY ([CLIENT_ID]) REFERENCES TBDD_CLIENT (GUID)) GO --INSERT INTO TBDD_LICENSE_ADD_ON (CLIENT_ID, MODULE, NAME, VALID_DATE) VALUES (0,'Record-Organizer', 'Proxy-Server', '+bk8oAbbQP1AzoHtvZUbd+Mbok2f8Fl4miEx1qssJ5yEaEWoQJ9prg4L14fURpPncZwT1S0JUXDWEzuCTBqgpd20QM74AAN6') --GO --INSERT INTO TBDD_LICENSE_ADD_ON (CLIENT_ID, MODULE, NAME, VALID_DATE) VALUES (1,'Record-Organizer', 'Site-AddOn', '+bk8oAbbQP1AzoHtvZUbd+Mbok2f8Fl4miEx1qssJ5yEaEWoQJ9prg4L14fURpPncZwT1S0JUXDWEzuCTBqgpd20QM74AAN6') --GO -- END CREATE TABLES CREATE TABLE TBDD_EMAIL_TEMPLATE ( GUID INTEGER NOT NULL IDENTITY (1, 1), TITLE VARCHAR(100) NOT NULL, EMAIL_SUBJECT VARCHAR(900) NOT NULL, EMAIL_BODY1 VARCHAR(MAX) NOT NULL, EMAIL_BODY2 VARCHAR(MAX) NOT NULL DEFAULT '', EMAIL_BODY3 VARCHAR(MAX) NOT NULL DEFAULT '', [LANGUAGE] VARCHAR(5) NOT NULL DEFAULT 'de-DE', CONNECTED_TEMPLATE INTEGER NOT NULL DEFAULT 0, ADDED_WHO VARCHAR(30) NOT NULL DEFAULT 'Digital Data', ADDED_WHEN DATETIME NOT NULL DEFAULT (GETDATE()), CHANGED_WHO VARCHAR(30), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBCUST_EMAIL_TEMPLATE PRIMARY KEY (GUID), CONSTRAINT UQ_TBCUST_EMAIL_TEMPLATE_TITLE UNIQUE (TITLE) ) GO CREATE TRIGGER TBCUST_EMAIL_TEMPLATE_AFT_UPD ON [dbo].[TBDD_EMAIL_TEMPLATE] FOR UPDATE AS BEGIN UPDATE TBDD_EMAIL_TEMPLATE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_EMAIL_TEMPLATE.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_SQL_COMMANDS ( GUID INTEGER NOT NULL IDENTITY (1, 1), TITLE VARCHAR(100) NOT NULL, SQL_COMMAND VARCHAR(MAX) NOT NULL, ADDED_WHO VARCHAR(30) NOT NULL DEFAULT 'Digital Data', ADDED_WHEN DATETIME NOT NULL DEFAULT (GETDATE()), CHANGED_WHO VARCHAR(30), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_SQL_COMMANDS PRIMARY KEY (GUID), CONSTRAINT UQ_TBDD_SQL_COMMANDS UNIQUE (TITLE) ) GO CREATE TRIGGER TBDD_SQL_COMMANDS_AFT_UPD ON [dbo].TBDD_SQL_COMMANDS FOR UPDATE AS BEGIN UPDATE TBDD_SQL_COMMANDS SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_SQL_COMMANDS.GUID = INSERTED.GUID END GO INSERT INTO TBDD_SQL_COMMANDS (TITLE,SQL_COMMAND) VALUES ('PM_IDB_DOC_DATA', 'select * from IDB.dbo.VWIDB_DOC_DATA T, TBPM_PROFILE_FILES T1 WHERE T.IDB_OBJ_ID = T1.DOC_ID AND T1.GUID = @DOC_GUID') GO INSERT INTO TBDD_SQL_COMMANDS (TITLE,SQL_COMMAND) VALUES ('GHOST_SELECT',' SELECT T.USERNAME,T.NAME, T.[PRENAME],T.EMAIL FROM TBDD_USER T ORDER BY USERNAME') GO CREATE TABLE TBDD_GUI_LANGUAGE_PHRASE ( GUID INTEGER NOT NULL IDENTITY (1, 1), MODULE VARCHAR(50) NOT NULL, INTERNAL BIT NOT NULL DEFAULT 0, OBJ_NAME VARCHAR(100) NOT NULL, TITLE VARCHAR(100) NOT NULL, [LANGUAGE] VARCHAR(5) NOT NULL, CAPT_TYPE VARCHAR(50) NOT NULL, STRING1 VARCHAR(900) NOT NULL, STRING2 VARCHAR(900) NOT NULL, STRING3 VARCHAR(900) , STRING4 VARCHAR(900), STRING5 VARCHAR(900), STRING6 VARCHAR(900), ACTIVE BIT NOT NULL DEFAULT 1, ADDED_WHO VARCHAR(30) NOT NULL DEFAULT 'Digital Data', ADDED_WHEN DATETIME DEFAULT (GETDATE()), CHANGED_WHO VARCHAR(30), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_GUI_LANGUAGE_PHRASE PRIMARY KEY (GUID), CONSTRAINT UQ_TBDD_GUI_LANGUAGE_PHRASE UNIQUE (MODULE,OBJ_NAME,TITLE,[LANGUAGE]) ) GO CREATE TRIGGER TBDD_GUI_LANGUAGE_PHRASE_AFT_UPD ON [dbo].[TBDD_GUI_LANGUAGE_PHRASE] FOR UPDATE AS BEGIN UPDATE TBDD_GUI_LANGUAGE_PHRASE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_GUI_LANGUAGE_PHRASE.GUID = INSERTED.GUID END GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.MissingInput','de-DE','Information','Bitte validieren Sie die rot markierten Felder!','') INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.MissingInput','en-US','Information','Please validate red marked fields!','') INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.ValidationButton','de-DE','Button','Validierung speichern - Nächstes Dokument (F2)','') INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.ValidationButton','en-US','Button','Save validation - Next document (F2)','') INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.NoMoreDocument','de-DE','MsgBox','No more document! End of profile!','') INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.NoMoreDocument','en-US','MsgBox','Kein weiteres Dokuemnt gefunden - Ende des Profils!','Hinweis') INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.WrongInputControl','de-DE','Information','Falsche Eingabe','') INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2) VALUES('frmValidator','PM','frmValidator.WrongInputControl','en-US','Information','Wrong input','') GO CREATE TABLE TBDD_GUI_LANGUAGE ( GUID INTEGER NOT NULL IDENTITY(1,1), LANG_CODE VARCHAR(5) NOT NULL, IS_DEFAULT BIT NOT NULL DEFAULT 0, ADDED_WHO VARCHAR(50) NOT NULL DEFAULT 'DEFAULT', ADDED_WHEN DATETIME NOT NULL DEFAULT GETDATE(), ACTIVE BIT NOT NULL DEFAULT 0, CHANGED_WHO VARCHAR(50), CHANGED_WHEN DATETIME CONSTRAINT PK_TBDD_GUI_LANGUAGE PRIMARY KEY (GUID) ) GO INSERT INTO TBDD_GUI_LANGUAGE (LANG_CODE,IS_DEFAULT,ACTIVE) VALUES ('de-DE',1,1); INSERT INTO TBDD_GUI_LANGUAGE (LANG_CODE) VALUES ('en-US'); INSERT INTO TBDD_GUI_LANGUAGE (LANG_CODE) VALUES ('fr-FR'); GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] ([MODULE] ,[TITLE] ,[LANGUAGE] ,[CAPT_TYPE] ,[STRING1] ,[STRING2] ,[ADDED_WHO] ,[OBJ_NAME] ,[INTERNAL]) VALUES ('All Modules' ,'No Userconfig' ,'de-DE' ,'Information' ,'Achtung: Sie sind nicht in der Userverwaltung hinterlegt!' ,'Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!' ,'SYSTEM' ,'General' ,1) GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] ([MODULE] ,[TITLE] ,[LANGUAGE] ,[CAPT_TYPE] ,[STRING1] ,[STRING2] ,[ADDED_WHO] ,[OBJ_NAME] ,[INTERNAL]) VALUES ('All Modules' ,'No Userconfig' ,'en-US' ,'Information' ,'Achtung: Sie sind nicht in der Userverwaltung hinterlegt!' ,'Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!' ,'SYSTEM' ,'General' ,1) GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] ([MODULE] ,[TITLE] ,[LANGUAGE] ,[CAPT_TYPE] ,[STRING1] ,[STRING2] ,[ADDED_WHO] ,[OBJ_NAME] ,[INTERNAL]) VALUES ('All Modules' ,'No Client relation' ,'de-DE' ,'Information' ,'You are not related to a client!' ,'Please contact the system administrator!!' ,'SYSTEM' ,'General' ,1) GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] ([MODULE] ,[TITLE] ,[LANGUAGE] ,[CAPT_TYPE] ,[STRING1] ,[STRING2] ,[ADDED_WHO] ,[OBJ_NAME] ,[INTERNAL]) VALUES ('All Modules' ,'No Client relation' ,'en-US' ,'Information' ,'You are not related to a client!' ,'Please contact the system administrator!!' ,'SYSTEM' ,'General' ,1) GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] ([MODULE] ,[TITLE] ,[LANGUAGE] ,[CAPT_TYPE] ,[STRING1] ,[STRING2] ,[ADDED_WHO] ,[OBJ_NAME] ,[INTERNAL]) VALUES ('All Modules' ,'No Module Configuration' ,'de-DE' ,'Information' ,'Achtung: Sie sind nicht für die Nutzung von ProcessManager freigegeben!' ,'Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!!' ,'SYSTEM' ,'General' ,1) GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] ([MODULE] ,[TITLE] ,[LANGUAGE] ,[CAPT_TYPE] ,[STRING1] ,[STRING2] ,[ADDED_WHO] ,[OBJ_NAME] ,[INTERNAL]) VALUES ('All Modules' ,'No Module Configuration' ,'en-US' ,'Information' ,'Achtung: Sie sind nicht für die Nutzung von ProcessManager freigegeben!' ,'Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!!' ,'SYSTEM' ,'General' ,1) GO INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2,INTERNAL) VALUES('Application','PM','App.ReminderPipeline','de-DE','Information','Es befinden sich noch unerledigte Aufgaben in Ihrem Verantwortungsbereich','',1); INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] (OBJ_NAME,[MODULE],[TITLE],[LANGUAGE],[CAPT_TYPE],[STRING1],STRING2,INTERNAL) VALUES('Application','PM','App.ReminderPipeline','en-US','Information','There are some tasks in your responsibility!','',1); GO Insert Into TBDD_GUI_LANGUAGE_PHRASE (MODULE,TITLE,LANGUAGE,CAPT_TYPE,STRING1,STRING2,OBJ_NAME) VALUES ('PM','frmValidator.Conversation_Delete','de-DE','MsgboxResult','Wollen Sie die Konversation beenden?','Nachfrage','frmValidator'); Insert Into TBDD_GUI_LANGUAGE_PHRASE (MODULE,TITLE,LANGUAGE,CAPT_TYPE,STRING1,STRING2,OBJ_NAME) VALUES ('PM','frmValidator.Conversation_Delete','en-US','MsgboxResult','Would You like to end this conversation?','Question','frmValidator'); GO CREATE TABLE [dbo].[TBDD_MONITORING_RESULT]( [USR_ID] INTEGER NULL, [GUID] INTEGER NULL, [PARENT_ID] INTEGER NULL, [STATE] VARCHAR(100) DEFAULT 'DEFAULT', [ICON] VARCHAR(100) NULL, [COLUMN1] VARCHAR(500) NULL, [COLUMN2] VARCHAR(500) NULL, [COLUMN3] VARCHAR(500) NULL, [ADDED_WHEN] DATETIME NULL, [SELECT1] NVARCHAR(max) NULL, [SELECT2] NVARCHAR(max) NULL, [SELECT3] NVARCHAR(max) NULL, [SELECT4] NVARCHAR(max) NULL, [DOCVIEW1] NVARCHAR(512) NULL, [DOCVIEW2] NVARCHAR(512) NULL, [HTML1] NVARCHAR(max) NULL, [HTML2] NVARCHAR(max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO --PROCEDURES -- 20.09.2024 MS @MODULE_SHORT eingesetzt CREATE OR ALTER PROCEDURE [dbo].[PRDD_CHECK_REL_DOCTYPE_MODULE] (@MODULE_SHORT VARCHAR(20),@DOCTYPE_ID INTEGER) AS DECLARE @MODULEID INTEGER SELECT @MODULEID = GUID FROM TBDD_MODULES WHERE SHORT_NAME = @MODULE_SHORT GO CREATE PROCEDURE [dbo].[PRDD_MONITORING_GET_TREEVIEW_RESULT] @TYPE VARCHAR(100),@PARAM1 NVARCHAR(500),@PARAM2 NVARCHAR(500),@PARAM3 NVARCHAR(500),@USR_ID INTEGER AS BEGIN DECLARE @TBResult TABLE ( GUID INTEGER, PARENT_ID INTEGER, -- -- STATE -- Options: SUCCESS, FAILURE, WARNING, WAITING, DEFAULT -- STATE VARCHAR(100) DEFAULT 'DEFAULT', -- -- ICON -- Options: MAIL, PDF, HTML -- ICON VARCHAR(100), COLUMN1 VARCHAR(500), COLUMN2 VARCHAR(500), COLUMN3 VARCHAR(500), ADDED_WHEN DATETIME, SELECT1 NVARCHAR(MAX), SELECT2 NVARCHAR(MAX), SELECT3 NVARCHAR(MAX), SELECT4 NVARCHAR(MAX), DOCVIEW1 NVARCHAR(512), DOCVIEW2 NVARCHAR(512), HTML1 NVARCHAR(MAX), HTML2 NVARCHAR(MAX) ) INSERT INTO @TBResult (GUID,PARENT_ID,ADDED_WHEN,COLUMN1,STATE) VALUES (1,0,GETDATE()-10,'EMAIL-EINGANG','SUCCESS') INSERT INTO @TBResult (GUID,PARENT_ID,COLUMN1,COLUMN2) VALUES (2,1,'Datum/Uhrzeit','2021-05-11 07:28:25') INSERT INTO @TBResult (GUID,PARENT_ID,COLUMN1,COLUMN2) VALUES (3,1,'Email-Versender','m.schreiber@digitaldata.works') INSERT INTO @TBResult (GUID,PARENT_ID,COLUMN1,COLUMN2) VALUES (4,1,'Betreff','Das Subject aus der Mail') INSERT INTO @TBResult (GUID,PARENT_ID,ADDED_WHEN,COLUMN1,STATE) VALUES (5,0,GETDATE()-8,'ZUGFeRD-Parser gestartet','SUCCESS') INSERT INTO @TBResult (GUID,PARENT_ID,ICON,COLUMN1,SELECT1) VALUES (6,5,'SQL','Click for Result','SELECT * FROM TBEDMI_ITEM_VALUE WHERE REFERENCE_GUID = ''350614162.18783.1593150528181@W2K8SRV0036030008840''|EDMI_ITEM_VALUE') INSERT INTO @TBResult (GUID,PARENT_ID,ICON,COLUMN1,DOCVIEW1) VALUES (7,5,'MAIL','OriginalMail','\\Windream\Objects\SWE_157906_Neggers~4-21_01_28.msg|Original Email') INSERT INTO @TBResult (GUID,PARENT_ID,ADDED_WHEN,COLUMN1,STATE) VALUES (8,5,GETDATE()-6,'Beleg Abgelehnt','WARNING') INSERT INTO @TBResult (GUID,PARENT_ID,ICON,COLUMN1,HTML1) VALUES (9,8,'MAIL','Ablehnungsmail','Sehr geehrte Damen und Herren,
das WISAG-Portal zur Verarbeitung der Eingangsrechnungen im ZUGFeRD-Format konnte die von Ihnen gesandte Rechnung 5403008595 leider nicht verarbeiten!
Letzter Bearbeiter in unserem Hause: Melanie Leilich - Melanie.Leilich@wisag.de

Ablehnung, da die Rechnung mit der Gutschrift 5403008596 verrechnet wird.
Letzter Bearbeiter in unserem Hause: Melanie Leilich

Bitte prüfen Sie die Datei und nehmen Sie bei Bedarf mit uns Kontakt auf.

Vielen Dank für Ihr Verständnis.
Mit freundlichen Grüßen
Ihre IT-Abteilung|Ablehnungsmail') INSERT INTO @TBResult (GUID,PARENT_ID,ADDED_WHEN,COLUMN1,STATE) VALUES (10,0,GETDATE()-5,'Finale Freigabe','SUCCESS') INSERT INTO @TBResult (GUID,PARENT_ID,COLUMN1,COLUMN2) VALUES (11,10,'Finaler Freigaber','d.schipper') INSERT INTO @TBResult (GUID,PARENT_ID,ADDED_WHEN,COLUMN1,STATE) VALUES (12,0,GETDATE()-5,'Ergebnisbericht erzeugt','SUCCESS') INSERT INTO @TBResult (GUID,PARENT_ID,ICON,COLUMN1,DOCVIEW1) VALUES (13,12,'FILE','Ergebnisbericht','\\Windream\Objects\fileFLOW-Test\4-20_06_08~8.pdf|Ergebnisbericht') INSERT INTO @TBResult (GUID,PARENT_ID,ADDED_WHEN,COLUMN1,STATE) VALUES (14,0,GETDATE()-4,'An SAP übergeben','WAITING') SELECT * FROM @TBResult END GO CREATE TABLE TBDD_MONITORING_PROFILE( GUID INTEGER NOT NULL IDENTITY(1,1), TITLE VARCHAR(30) NOT NULL, DESCRIPTION VARCHAR(100), ACTIVE BIT NOT NULL DEFAULT 1, SEQUENCE TINYINT NOT NULL DEFAULT 1, ADDED_WHEN DATETIME NOT NULL DEFAULT GETDATE(), CHANGED_WHEN DATETIME, CONSTRAINT [PK_TBDD_MONITORING_PROFILE] PRIMARY KEY(GUID)) GO CREATE TRIGGER [dbo].[TBDD_MONITORING_PROFILE_AFT_UPD] ON [dbo].[TBDD_MONITORING_PROFILE] FOR UPDATE AS BEGIN UPDATE TBDD_MONITORING_PROFILE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_MONITORING_PROFILE.GUID = INSERTED.GUID END GO CREATE TABLE TBDD_MONITORING_PROFILE_ATTRIBUTES( GUID INTEGER NOT NULL IDENTITY(1,1), MONITOR_PROFILE_ID INTEGER NOT NULL, [CAPTION] VARCHAR(100) NOT NULL, DESCRIPTION VARCHAR(100), ACTIVE BIT NOT NULL DEFAULT 1, SEQUENCE TINYINT NOT NULL DEFAULT 1, ADDED_WHEN DATETIME NOT NULL DEFAULT GETDATE(), CHANGED_WHEN DATETIME, CONSTRAINT [PK_TBDD_MONITORING_PROFILE_ATTRIBUTES] PRIMARY KEY(GUID), CONSTRAINT FK_TBDD_MONITORING_PROF_ATTR_MPID FOREIGN KEY (MONITOR_PROFILE_ID) REFERENCES TBDD_MONITORING_PROFILE (GUID)) GO CREATE TRIGGER [dbo].[TBDD_MONITORING_PROFILE_ATTRIBUTES_AFT_UPD] ON [dbo].TBDD_MONITORING_PROFILE_ATTRIBUTES FOR UPDATE AS BEGIN UPDATE TBDD_MONITORING_PROFILE_ATTRIBUTES SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_MONITORING_PROFILE_ATTRIBUTES.GUID = INSERTED.GUID END GO --############################################ --##########PROCEDURES######################## --############################################ CREATE PROCEDURE [dbo].[PRDD_DELETE_USER](@pUSER_ID INT) AS BEGIN TRY -- COMMON IF OBJECT_ID(N'dbo.TBDD_USER_MODULES', N'U') IS NOT NULL DELETE FROM TBDD_USER_MODULES WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBDD_CLIENT_USER', N'U') IS NOT NULL DELETE FROM TBDD_CLIENT_USER WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBDD_GROUPS_USER', N'U') IS NOT NULL DELETE FROM TBDD_GROUPS_USER WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBDD_VERSION_USER_UPDATE', N'U') IS NOT NULL DELETE FROM TBDD_VERSION_USER_UPDATE WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBDD_VERSION_USER_UPDATE_PATH', N'U') IS NOT NULL DELETE FROM TBDD_VERSION_USER_UPDATE_PATH WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBDD_USER_LOGIN_OUT', N'U') IS NOT NULL DELETE FROM TBDD_USER_LOGIN_OUT WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBDD_USER_MODULE_LOG_IN', N'U') IS NOT NULL DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = @pUSER_ID -- PROCESS MANAGER IF OBJECT_ID(N'dbo.TBPM_PROFILE_USER', N'U') IS NOT NULL DELETE FROM TBPM_PROFILE_USER WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBPMO_FOLDERWATCH_USER', N'U') IS NOT NULL DELETE FROM TBPMO_FOLDERWATCH_USER WHERE USER_ID = @pUSER_ID -- GLOBAL INDEXER IF OBJECT_ID(N'dbo.TBGI_FOLDERWATCH_USER', N'U') IS NOT NULL DELETE FROM TBGI_FOLDERWATCH_USER WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBHOTKEY_USER_PROFILE', N'U') IS NOT NULL DELETE FROM TBHOTKEY_USER_PROFILE WHERE USER_ID = @pUSER_ID -- CLIPBOARD WATCHER IF OBJECT_ID(N'dbo.TBCW_USER_PROFILE', N'U') IS NOT NULL DELETE FROM TBCW_USER_PROFILE WHERE USER_ID = @pUSER_ID --_ADDI IF OBJECT_ID(N'dbo.TBPMO_CONSTRUCTOR_USER', N'U') IS NOT NULL DELETE FROM TBPMO_CONSTRUCTOR_USER WHERE USER_ID = @pUSER_ID IF OBJECT_ID(N'dbo.TBPMO_USER_CONSTR_VIEW_TYPE', N'U') IS NOT NULL DELETE FROM TBPMO_USER_CONSTR_VIEW_TYPE WHERE USER_ID = @pUSER_ID -- FINALLY DELETE FROM TBDD_USER WHERE GUID = @pUSER_ID RETURN 0 END TRY BEGIN CATCH PRINT 'FEHLER IN PROCEDURE: ' + CONVERT(VARCHAR(30),ERROR_PROCEDURE()) + ' - ZEILE: ' + CONVERT(VARCHAR(10),ERROR_LINE()) + ' - FEHLER-MESSAGE: ' + CONVERT(VARCHAR(500),ERROR_MESSAGE()) RETURN -1 END CATCH GO CREATE PROCEDURE [dbo].[PRDD_USER_REFRESH_WM_ID] AS DECLARE @GUID INTEGER, @USERNAME VARCHAR(500) DECLARE c_REDO CURSOR FOR select GUID,USERNAME from TBDD_USER OPEN c_REDO FETCH NEXT FROM c_REDO INTO @GUID,@USERNAME WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @ECM_USR_ID INTEGER SELECT @ECM_USR_ID = [dwUserID] FROM @WINDREAM_DB.[dbo].[UserInfo] where UPPER(szUserName) = UPPER(@USERNAME) IF @ECM_USR_ID IS NOT NULL UPDATE TBDD_USER SET USERID_FK_INT_ECM = @ECM_USR_ID WHERE GUID = @GUID FETCH NEXT FROM c_REDO INTO @GUID,@USERNAME END CLOSE c_REDO DEALLOCATE c_REDO GO CREATE TABLE TBDD_EXTATTRIBUTES_MATCHING ( GUID INTEGER IDENTITY(1,1), EXT_ATTRIBUTE VARCHAR(250), TBDD_USER_COLUMN VARCHAR(150), FB_SYS_KEY VARCHAR(150) DEFAULT '' CONSTRAINT PK_TBAD_EXTATTRIBUTES_MATCHING_GUID PRIMARY KEY(GUID) ) GO CREATE TABLE TBDD_NOTIFICATIONS_SYSTEM ( GUID INTEGER NOT NULL IDENTITY (1, 1), TITLE VARCHAR(250) NOT NULL, MODULE VARCHAR(250) NOT NULL, DISPLAY_TYPE VARCHAR(100) NOT NULL, MSG_STRING NVARCHAR(MAX) NOT NULL, LANG_CODE VARCHAR(5) NOT NULL DEFAULT 'ALL', DISPLAY_UNTIL DATE, VALIDATE_READ BIT NOT NULL DEFAULT 0, ADDED_WHO VARCHAR(100), ADDED_WHEN DATETIME DEFAULT GETDATE(), CHANGED_WHO VARCHAR(100), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_NOTIFICATIONS_SYSTEM PRIMARY KEY (GUID), ) GO CREATE TRIGGER TTBDD_NOTIFICATIONS_SYSTEM_AFT_UPD ON TBDD_NOTIFICATIONS_SYSTEM FOR UPDATE AS UPDATE TBDD_NOTIFICATIONS_SYSTEM SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_NOTIFICATIONS_SYSTEM .GUID = INSERTED.GUID GO CREATE TABLE TBDD_NOTIFICATIONS_USER_HISTORY ( GUID INTEGER IDENTITY(1,1), NOTIFY_ID INT NOT NULL, USR_ID INT NOT NULL, ADDED_WHEN DATETIME DEFAULT GETDATE(), CONSTRAINT PK_TBDD_NOTIFICATIONS_USER_HISTORY PRIMARY KEY (GUID), CONSTRAINT FK_TBDD_NOTIFICATIONS_USER_HISTORY_NID FOREIGN KEY(NOTIFY_ID) REFERENCES TBDD_NOTIFICATIONS_SYSTEM(GUID), ) GO --###### VIEWS ##### CREATE VIEW [dbo].[VWDD_WM_ACCESS_RIGHTS_GROUP] AS SELECT AR.dwObjectID, UG.dwUserOrGROUPID, AR.dwAccessRight, AR.dwObjectDBID FROM @WINDREAM_DB.dbo.AccessRight AR LEFT JOIN @WINDREAM_DB.dbo.UserGroup UG ON AR.dwUserOrGroupID = UG.dwGroupID INNER JOIN TBDD_USER TU ON UG.dwUserOrGroupID = TU.USERID_FK_INT_ECM WHERE UG.dwUserOrGroupID IS NOT NULL GO CREATE VIEW [dbo].[VWDD_WM_ACCESS_RIGHTS_USER] AS SELECT AR.dwObjectID, AR.dwUserOrGROUPID, AR.dwAccessRight, AR.dwObjectDBID FROM @WINDREAM_DB.dbo.AccessRight AR LEFT JOIN @WINDREAM_DB.dbo.UserGroup UG ON AR.dwUserOrGroupID = UG.dwGroupID INNER JOIN TBDD_USER TU ON AR.dwUserOrGroupID = TU.USERID_FK_INT_ECM WHERE UG.dwUserOrGroupID IS NULL GO CREATE VIEW [dbo].[VWDD_WM_ACCESS_RIGHTS] AS SELECT ARU.dwObjectID, ARU.dwUserOrGROUPID, ARU.dwAccessRight, ARU.dwObjectDBID FROM VWDD_WM_ACCESS_RIGHTS_USER ARU UNION SELECT ARG.dwObjectID, ARG.dwUserOrGROUPID, ARG.dwAccessRight, ARG.dwObjectDBID FROM VWDD_WM_ACCESS_RIGHTS_GROUP ARG GO CREATE VIEW [dbo].[VWDD_CUST_USER_LAST30Days] as SELECT DISTINCT USER_ID --Count(USER_ID), MONTH() FROM TBDD_USER_LOGIN_OUT WHERE UPPER(MODULE) = UPPER('Process-Manager') and DATEDIFF(DAY,LOGIN,GETDATE()) <= 90 GO CREATE VIEW VWDD_LOGIN_USER_HISTORY AS SELECT TOP (5000) T.GUID, T.MODULE, T1.USERNAME, T1.NAME, T1.PRENAME, T1.GUID as USER_ID, T.CLIENT_ID, T2.CLIENT_NAME, T.LOGIN, T.LOGOUT, T.VERSION_CLIENT, T.MACHINE_NAME FROM TBDD_USER_LOGIN_OUT T, TBDD_USER T1, TBDD_CLIENT T2 WHERE T.USER_ID = T1.GUID AND T.CLIENT_ID = T2.GUID ORDER BY GUID DESC GO CREATE VIEW VWDD_USER2GROUP AS SELECT TOP 100 PERCENT T.GUID, T.USERNAME, T2.GUID as GROUP_ID, T2.NAME, T2.COMMENT FROM TBDD_USER T, TBDD_GROUPS_USER T1, TBDD_GROUPS T2 WHERE T.GUID = T1.USER_ID AND T1.GROUP_ID = T2.GUID ORDER BY T.USERNAME GO CREATE VIEW VWDDINDEX_MAN AS SELECT TOP 2000 T.GUID, T.NAME INDEXNAME, T.WD_INDEX, T.COMMENT, T.DATATYPE, T.DOK_ID, T1.BEZEICHNUNG DOKUMENTART, T1.KURZNAME, T.SUGGESTION, T.CONNECTION_ID, T2.BEZEICHNUNG CONNECTION, T2.SQL_PROVIDER, T2.SERVER, T2.DATENBANK, T2.USERNAME, T2.PASSWORD, T.SQL_RESULT, T.SQL_CHECK, T.OPTIONAL, T.SAVE_VALUE, T.DEFAULT_VALUE, T.MULTISELECT, T.SEQUENCE FROM TBDD_INDEX_MAN T INNER JOIN TBDD_DOKUMENTART T1 ON T.DOK_ID = T1.GUID AND T1.AKTIV = 1 LEFT JOIN TBDD_CONNECTION T2 ON T.CONNECTION_ID = T2.GUID AND T2.AKTIV = 1 WHERE T.ACTIVE = 1 ORDER BY T.DOK_ID, T.GUID GO CREATE VIEW [dbo].[VWDDINDEX_AUTOM] AS SELECT TOP 100 PERCENT T.GUID, T.INDEXNAME, T.COMMENT, T.DOCTYPE_ID, T1.BEZEICHNUNG DOKUMENTART, T1.KURZNAME, T.CONNECTION_ID, T2.BEZEICHNUNG CONNECTION, T2.SQL_PROVIDER, T2.SERVER, T2.DATENBANK, T2.USERNAME, T2.PASSWORD, T.SQL_RESULT, T.SQL_ACTIVE, T.VALUE, T.[SEQUENCE], T.VKT_OVERWRITE, T.VKT_PREVENT_MULTIPLE_VALUES FROM TBDD_INDEX_AUTOM T INNER JOIN TBDD_DOKUMENTART T1 ON T.DOCTYPE_ID = T1.GUID AND T1.AKTIV = 1 LEFT JOIN TBDD_CONNECTION T2 ON T.CONNECTION_ID = T2.GUID AND T2.AKTIV = 1 WHERE T.ACTIVE = 1 ORDER BY T.DOCTYPE_ID, T.GUID GO CREATE VIEW VWDDINDICES_MAN_AUTO_ACTIVE AS SELECT TOP 100 PERCENT DOK_ID AS DOCTYPE_ID, 'm' + NAME AS NAME FROM TBDD_INDEX_MAN WHERE ACTIVE = 1 UNION SELECT TOP 100 PERCENT DOCTYPE_ID AS DOCTYPE_ID, 'a' + INDEXNAME AS NAME FROM TBDD_INDEX_AUTOM WHERE ACTIVE = 1 ORDER BY DOCTYPE_ID GO CREATE VIEW VWDD_USER_CLIENT AS SELECT T1.GUID AS CLIENT_ID ,T1.CLIENT_NAME ,T.USER_ID ,T2.USERNAME FROM TBDD_CLIENT_USER T ,TBDD_CLIENT T1 ,TBDD_USER T2 WHERE T1.ACTIVE = 1 AND T.CLIENT_ID = T1.GUID AND T.USER_ID = T2.GUID GO --####Functions -- [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 -- [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 CREATE OR ALTER FUNCTION [dbo].[FNDD_LOGIN_USER_MODULE] (@pUSERNAME VARCHAR(100), @pMODULE_SHORT_NAME VARCHAR(10),@pCLIENTID INTEGER) RETURNS @Table TABLE (SequentialOrder INT IDENTITY(1, 1), USER_ID INTEGER, USER_PRENAME VARCHAR(50), USER_SURNAME VARCHAR(50), USER_SHORTNAME VARCHAR(50), USER_EMAIL VARCHAR(100), USER_LANGUAGE VARCHAR(10), USER_LANGUAGE_ID TINYINT NOT NULL DEFAULT 1, USER_DATE_FORMAT VARCHAR(10), USER_RIGHT_FILE_DEL BIT, MODULE_ACCESS BIT, IS_ADMIN BIT, USERCOUNT_LOGGED_IN INTEGER, COMMENT VARCHAR(500), USER_RIGHT2 BIT NOT NULL DEFAULT 1, USER_RIGHT3 BIT NOT NULL DEFAULT 0, USER_RIGHT4 BIT NOT NULL DEFAULT 0, USER_RIGHT5 BIT NOT NULL DEFAULT 0, WORKING_MODE VARCHAR(5000) NOT NULL DEFAULT '' ,ADDITIONAL_TITLE VARCHAR(200)) AS BEGIN /* This function checks all user-relevant relations an */ DECLARE @RESULT VARCHAR(500), @USER_ID INTEGER, @USER_PRENAME VARCHAR(50), @USER_SURNAME VARCHAR(50), @USER_SHORTNAME VARCHAR(50), @USER_EMAIL VARCHAR(50), @USER_LANGUAGE VARCHAR(10), @USER_LANGUAGE_ID TINYINT, @USER_DATE_FORMAT VARCHAR(10), @IS_IN_MODULE BIT, @IS_ADMIN BIT, @USER_RIGHT_FILE_DEL BIT, @USER_RIGHT2 BIT, @USER_RIGHT3 BIT, @USER_RIGHT4 BIT, @USER_RIGHT5 BIT, @USERCOUNT_LOGGED_IN INTEGER, @MODULE_NAME VARCHAR(100), @MODULE_GUID INTEGER, @USER_GROUPNAME VARCHAR(100), @ADMIN_GROUPNAME VARCHAR(100), @WORKING_MODE VARCHAR(1000), @ADDITIONAL_TITLE VARCHAR(500) --'PM#NO_MASS_VALIDATOR;PM#FORCE_LAYOUT_OVERVIEW;PM#NO_CHARTS;PM#DEBUG_LOG' SET @ADDITIONAL_TITLE = '' SET @USER_RIGHT2 = 1 --= DocumentPropertyView only View SET @USER_RIGHT3 = 0 SET @USER_RIGHT4 = 0 SET @USER_RIGHT5 = 0 DECLARE @CONN_ID_IDB INTEGER SELECT @CONN_ID_IDB = GUID FROM TBDD_CONNECTION WHERE BEZEICHNUNG = 'IDB' SET @WORKING_MODE = '' IF @pMODULE_SHORT_NAME = 'PM' BEGIN SET @WORKING_MODE = 'OPERATION_MODE_FS=IDB_WM#PM.IDBWITHWMFS#PM.IDB_CONID!' + CONVERT(VARCHAR(2),@CONN_ID_IDB) + '#PM.NO_MASS_VALIDATOR' --#PM.NO_CHARTS#PM.DEBUG_LOG#PM.FORCE_LAYOUT_OVERVIEW#PM.IDBWITHWMFS +'#PM.MONITORING#PM.COLORSCHEME=Purple#PM.CONV_IDENTIFICATION=Email#PM.INACTIVITY_DURATION=9#PM.COL_LAST_EDITED=[Zuletzt bearbeitet]#PM.COL_LAST_ADDED=[Addedwhen]' --#PM.NO_BASICCONF#PM.NO_DETAIL_PROFILES --PM.SYS_LOCKED_MAINTENANCE# +'#PM.SEARCH1=Starte Suche 1~MyExePath\Folder\myexe.exe%--start-search=id|7~doctype|ARE#PM.GHOSTMODE' --#PM.DEBUG_LOG + '#PM.TRAFFICLIGHT_ICON=False#PM.START_CW=Start Globale Suche~-1#PM.RibbonPageCustTitle=WISAG#PM.RibbonPageCustItm1=Anhänge#PM.ButtonExport2FolderCaption=Export Y:#PM.ButtonExport2Folder_RootFolder=S#PM.ButtonExport2Folder_Mode=Convert to PDF' SET @ADDITIONAL_TITLE = 'Mein Workflow zur Demo' END ELSE IF @pMODULE_SHORT_NAME = 'CW' SET @WORKING_MODE = 'NOMATCH_INFO=False#HotkeySearchKey=d#NotifyMode=Msgbox'--#NotifyMode=NotifyIcon' ELSE IF @pMODULE_SHORT_NAME = 'ZF' SET @WORKING_MODE = 'NO_BASICCONF#NOMATCH_INFO=False#SEARCH_STRING_ATTRID=1,2#SEARCH_INT_ATTRID=5' SET @USER_ID = 0 SET @IS_ADMIN = 0 SET @IS_IN_MODULE = 0 SET @USERCOUNT_LOGGED_IN = 0 SET @RESULT = '' IF @pMODULE_SHORT_NAME = 'PM' BEGIN SET @USER_GROUPNAME = 'PM_USER' SET @ADMIN_GROUPNAME = 'PM_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'CW' BEGIN SET @USER_GROUPNAME = 'CW_USER' SET @ADMIN_GROUPNAME = 'CW_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'ADDI' BEGIN SET @USER_GROUPNAME = 'ADDI_USER' SET @ADMIN_GROUPNAME = 'ADDI_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'fileFLOW' BEGIN SET @USER_GROUPNAME = 'fileFLOW_USER' SET @ADMIN_GROUPNAME = 'fileFLOW_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'UM' BEGIN SET @USER_GROUPNAME = 'XXXX' SET @ADMIN_GROUPNAME = 'UM_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'SIG_ENV_CR' BEGIN SET @USER_GROUPNAME = 'ENVELOPE-CREATOR' SET @ADMIN_GROUPNAME = 'XXXX' END SELECT @MODULE_GUID = GUID, @MODULE_NAME = NAME FROM TBDD_MODULES WHERE SHORT_NAME = @pMODULE_SHORT_NAME IF NOT EXISTS(SELECT GUID FROM TBDD_USER WHERE UPPER(USERNAME) = UPPER(@pUSERNAME)) BEGIN SET @RESULT = 'USER NOT CONFIGURED OR LISTED' END ELSE BEGIN SELECT @USER_ID = T.GUID,@USER_PRENAME = T.PRENAME, @USER_SURNAME = T.NAME ,@USER_SHORTNAME = T.SHORTNAME ,@USER_EMAIL = T.EMAIL ,@USER_LANGUAGE = T.LANGUAGE ,@USER_DATE_FORMAT = T.DATE_FORMAT FROM TBDD_USER T WHERE UPPER(USERNAME) = UPPER(@pUSERNAME) IF @USER_LANGUAGE = 'de-DE' SET @USER_LANGUAGE_ID = 1 ELSE IF @USER_LANGUAGE = 'en-US' SET @USER_LANGUAGE_ID = 2 ELSE IF @USER_LANGUAGE = 'fr-FR' SET @USER_LANGUAGE_ID = 3 --IF @USER_ID = 1 -- SET @USER_LANGUAGE = 'en-US' --##### LICENSE COUNT SELECT @USERCOUNT_LOGGED_IN = COUNT(*) FROM TBDD_USER_MODULE_LOG_IN WHERE UPPER(MODULE) = UPPER(@MODULE_NAME) AND CLIENT_ID = @pCLIENTID --CHECK USER ÍS IN MODULE_USER_GROUP IF EXISTS(select T1.* from TBDD_GROUPS T, TBDD_GROUPS_USER T1 WHERE T.GUID = T1.GROUP_ID AND T1.USER_ID = @USER_ID AND UPPER(T.NAME) = @USER_GROUPNAME) BEGIN SET @IS_IN_MODULE = 1 SET @RESULT = 'User is part of Group (' + @USER_GROUPNAME + ')' IF EXISTS(select T.* from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID) BEGIN SET @RESULT = @RESULT + '| User is also configured in User-Modules' select @IS_ADMIN = T.IS_ADMIN,@USER_RIGHT_FILE_DEL = T.RIGHT1 from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID END END ELSE BEGIN SET @RESULT = 'User not part of group (' + @USER_GROUPNAME + ')' IF EXISTS(select T.* from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID) BEGIN SET @RESULT = @RESULT + '| BUT User configured in User-Modules' select @IS_ADMIN = T.IS_ADMIN,@USER_RIGHT_FILE_DEL = T.RIGHT1 --,@USER_RIGHT2 = T.RIGHT2 from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID END END IF EXISTS(select T1.* from TBDD_GROUPS T, TBDD_GROUPS_USER T1 WHERE T.GUID = T1.GROUP_ID AND T1.USER_ID = @USER_ID AND UPPER(T.NAME) = @ADMIN_GROUPNAME) BEGIN SET @RESULT = @RESULT + '| User is part of group (' + @ADMIN_GROUPNAME + ')' SET @IS_ADMIN = 1 SET @IS_IN_MODULE = 1 END END INSERT INTO @Table (USER_ID,USER_PRENAME, USER_SURNAME,USER_SHORTNAME,USER_EMAIL,USER_LANGUAGE,USER_LANGUAGE_ID, USER_DATE_FORMAT, USER_RIGHT_FILE_DEL, MODULE_ACCESS,IS_ADMIN,USERCOUNT_LOGGED_IN, COMMENT,WORKING_MODE,USER_RIGHT2,USER_RIGHT3,USER_RIGHT4,USER_RIGHT5 ,ADDITIONAL_TITLE) VALUES (@USER_ID,@USER_PRENAME,@USER_SURNAME,@USER_SHORTNAME,@USER_EMAIL,@USER_LANGUAGE,@USER_LANGUAGE_ID,@USER_DATE_FORMAT,@USER_RIGHT_FILE_DEL, @IS_IN_MODULE,@IS_ADMIN,@USERCOUNT_LOGGED_IN,@RESULT,@WORKING_MODE,@USER_RIGHT2,@USER_RIGHT3,@USER_RIGHT4,@USER_RIGHT5 ,@ADDITIONAL_TITLE) RETURN END GO CREATE VIEW VWDD_USER_GROUP_MODULE AS select T1.NAME AS GROUP_NAME, TU.* FROM TBDD_GROUPS_USER T, TBDD_GROUPS T1, TBDD_USER TU WHERE TU.NAME IS NOT NULL AND TU.PRENAME IS NOT NULL AND T1.INTERNAL = 1 AND T.GROUP_ID = T1.GUID AND T.USER_ID = TU.GUID --AND T1.NAME IN ('CW_USER','CW_ADMINS') UNION SELECT T2.NAME AS GROUP_MODULE, TU.* FROM TBDD_USER TU, TBDD_USER_MODULES T1, TBDD_MODULES T2 WHERE TU.NAME IS NOT NULL AND TU.PRENAME IS NOT NULL AND TU.GUID = T1.USER_ID AND T1.MODULE_ID = T2.GUID GO CREATE VIEW VWDD_USER_MODULE_CW AS SELECT DISTINCT GUID , USERNAME, NAME, PRENAME, EMAIL FROM VWDD_USER_GROUP_MODULE WHERE GROUP_NAME IN ('Clipboard-Watcher','CW_USER','CW_ADMINS') GO CREATE FUNCTION [dbo].[FNDD_GET_USER_FOR_GROUP] (@pGROUP_ID INTEGER,@pONLY_FREE BIT) RETURNS @Table TABLE (USER_ID INTEGER, USER_PRENAME VARCHAR(50), USER_SURNAME VARCHAR(50), USER_SHORTNAME VARCHAR(50), USER_EMAIL VARCHAR(100), USER_LANGUAGE VARCHAR(10), COMMENT VARCHAR(500)) AS BEGIN IF @pONLY_FREE = 1 INSERT INTO @Table (USER_ID,USER_PRENAME,USER_SURNAME,USER_SHORTNAME,USER_EMAIL,USER_LANGUAGE,COMMENT) select T.GUID, T.PRENAME, T.NAME, T.SHORTNAME, T.EMAIL,T.LANGUAGE, T.COMMENT FROM TBDD_USER T, TBDD_GROUPS_USER T1 WHERE T1.USER_ID = T.GUID AND T.GUID NOT IN (SELECT USER_ID FROM TBDD_GROUPS_USER WHERE GROUP_ID = @pGROUP_ID) ELSE INSERT INTO @Table (USER_ID,USER_PRENAME,USER_SURNAME,USER_SHORTNAME,USER_EMAIL,USER_LANGUAGE,COMMENT) select T.GUID, T.PRENAME, T.NAME, T.SHORTNAME, T.EMAIL,T.LANGUAGE, T.COMMENT FROM TBDD_USER T, TBDD_GROUPS_USER T1 WHERE T1.USER_ID = T.GUID AND T1.GROUP_ID = @pGROUP_ID RETURN END GO -- 20.09.2024 MS fileFLOW as Module ALTER FUNCTION [dbo].[FNDD_GET_USER_FOR_MODULE] (@pMODULE_SHORT_NAME VARCHAR(10),@pCLIENTID INTEGER) RETURNS @Table TABLE (SequentialOrder INT IDENTITY(1, 1), USER_ID INTEGER, USER_NAME VARCHAR(50), USER_PRENAME VARCHAR(50), USER_SURNAME VARCHAR(50), USER_SHORTNAME VARCHAR(50), USER_EMAIL VARCHAR(100), USER_LANGUAGE VARCHAR(10), USER_RIGHT_FILE_DEL BIT, MODULE_ACCESS BIT, IS_ADMIN BIT, USER_COMMENT VARCHAR(500), COMMENT VARCHAR(500)) AS BEGIN /* This function checks all user-relevant relations an */ DECLARE @RESULT VARCHAR(500), @USER_ID INTEGER, @USER_NAME VARCHAR(50), @USER_PRENAME VARCHAR(50), @USER_SURNAME VARCHAR(50), @USER_SHORTNAME VARCHAR(50), @USER_EMAIL VARCHAR(50), @USER_LANGUAGE VARCHAR(10), @IS_IN_MODULE BIT, @IS_ADMIN BIT, @USER_RIGHT_FILE_DEL BIT, @MODULE_NAME VARCHAR(100), @MODULE_GUID INTEGER, @USER_GROUPNAME VARCHAR(100), @ADMIN_GROUPNAME VARCHAR(100), @USER_COMMENT VARCHAR(500) IF @pMODULE_SHORT_NAME = 'PM' BEGIN SET @USER_GROUPNAME = 'PM_USER' SET @ADMIN_GROUPNAME = 'PM_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'CW' BEGIN SET @USER_GROUPNAME = 'CW_USER' SET @ADMIN_GROUPNAME = 'CW_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'ADDI' BEGIN SET @USER_GROUPNAME = 'ADDI_USER' SET @ADMIN_GROUPNAME = 'ADDI_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'fileFLOW' BEGIN SET @USER_GROUPNAME = 'fileFLOW_USER' SET @ADMIN_GROUPNAME = 'fileFLOW_ADMINS' END ELSE IF @pMODULE_SHORT_NAME = 'UM' BEGIN SET @USER_GROUPNAME = 'XXXX' SET @ADMIN_GROUPNAME = 'UM_ADMINS' END SELECT @MODULE_GUID = GUID, @MODULE_NAME = NAME FROM TBDD_MODULES WHERE SHORT_NAME = @pMODULE_SHORT_NAME DECLARE cursor_user CURSOR FOR select GUID, ISNULL(PRENAME,'no prename'), ISNULL(NAME,'no name'), ISNULL(SHORTNAME,'no shortname'), ISNULL(EMAIL,'no email'), LANGUAGE,USERNAME,COMMENT from TBDD_USER OPEN cursor_user FETCH NEXT FROM cursor_user INTO @USER_ID,@USER_PRENAME,@USER_SURNAME,@USER_SHORTNAME,@USER_EMAIL,@USER_LANGUAGE,@USER_NAME,@USER_COMMENT WHILE @@FETCH_STATUS = 0 BEGIN SET @IS_ADMIN = 0 SET @IS_IN_MODULE = 0 SET @RESULT = '' --CHECK USER IS IN MODULE_USER_GROUP IF EXISTS(select T1.* from TBDD_GROUPS T, TBDD_GROUPS_USER T1 WHERE T.GUID = T1.GROUP_ID AND T1.USER_ID = @USER_ID AND UPPER(T.NAME) = @USER_GROUPNAME) BEGIN SET @IS_IN_MODULE = 1 SET @RESULT = 'User is part of Group (' + @USER_GROUPNAME + ')' IF EXISTS(select T.* from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID) BEGIN SET @RESULT = @RESULT + '| User is also configured in User-Modules (Unnecessary)' select @IS_ADMIN = T.IS_ADMIN,@USER_RIGHT_FILE_DEL = T.RIGHT1 from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID END END ELSE BEGIN SET @RESULT = 'User <' + CONVERT(VARCHAR(10),@USER_ID) + ' - ' + @USER_NAME + '> not part of group (' + @USER_GROUPNAME + ')' IF EXISTS(select T.* from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID) BEGIN SET @RESULT = @RESULT + '| BUT User configured in User-Modules' select @IS_ADMIN = T.IS_ADMIN,@USER_RIGHT_FILE_DEL = T.RIGHT1 from TBDD_USER_MODULES T WHERE T.USER_ID = @USER_ID AND T.MODULE_ID = @MODULE_GUID SET @IS_IN_MODULE = 1 END END IF EXISTS(select T1.* from TBDD_GROUPS T, TBDD_GROUPS_USER T1 WHERE T.GUID = T1.GROUP_ID AND T1.USER_ID = @USER_ID AND UPPER(T.NAME) = @ADMIN_GROUPNAME) BEGIN SET @RESULT = @RESULT + '| User is part of group (' + @ADMIN_GROUPNAME + ')' SET @IS_ADMIN = 1 SET @IS_IN_MODULE = 1 END --PRINT @RESULT IF @IS_IN_MODULE = 1 INSERT INTO @Table (USER_ID,USER_NAME, USER_PRENAME, USER_SURNAME,USER_SHORTNAME,USER_EMAIL,USER_LANGUAGE, USER_RIGHT_FILE_DEL, MODULE_ACCESS,IS_ADMIN,USER_COMMENT,COMMENT) VALUES (@USER_ID,@USER_NAME,@USER_PRENAME,@USER_SURNAME,@USER_SHORTNAME,@USER_EMAIL,@USER_LANGUAGE,@USER_RIGHT_FILE_DEL,@IS_IN_MODULE,@IS_ADMIN,@USER_COMMENT,@RESULT) FETCH NEXT FROM cursor_user INTO @USER_ID,@USER_PRENAME,@USER_SURNAME,@USER_SHORTNAME,@USER_EMAIL,@USER_LANGUAGE,@USER_NAME,@USER_COMMENT END CLOSE cursor_user DEALLOCATE cursor_user RETURN END GO CREATE FUNCTION [dbo].[FNDD_LANGUAGE_PHRASE](@pTITLE VARCHAR(100),@pLANG_CODE VARCHAR(5), @pMODULE VARCHAR(10)) RETURNS VARCHAR(500) AS BEGIN DECLARE @RESULT VARCHAR(250), @CTRL_CONFIG_TITLE VARCHAR(100) SELECT @RESULT = STRING1 FROM TBDD_GUI_LANGUAGE_PHRASE WHERE MODULE = @pMODULE AND TITLE = @pTITLE AND [LANGUAGE] = @pLANG_CODE IF LEN(@RESULT) > 0 SET @RESULT = @RESULT ELSE BEGIN SELECT @RESULT = STRING1 FROM TBDD_GUI_LANGUAGE_PHRASE WHERE MODULE = @pMODULE AND TITLE = @pTITLE AND [LANGUAGE] = 'de-DE' SET @RESULT = @RESULT + ' (NoLangConf)' END RETURN @RESULT END GO CREATE PROCEDURE [dbo].[PRDD_GUI_LANGUAGE_PHRASE] (@pMODULE VARCHAR(10),@pTITLE VARCHAR(100),@pLANG_CODE VARCHAR(5),@pCAPTION_TYPE VARCHAR(50),@pSTRING1 VARCHAR(900),@pSTRING2 VARCHAR(900),@pWHO VARCHAR(100) ,@pOBJ_NAME VARCHAR(100),@pINTERNAL BIT) AS If NOT EXISTS(SELECT GUID FROm TBDD_GUI_LANGUAGE_PHRASE WHERE [MODULE] = @pMODULE AND TITLE = @pTITLE AND [LANGUAGE] = @pLANG_CODE) INSERT INTO [dbo].[TBDD_GUI_LANGUAGE_PHRASE] ([MODULE] ,[TITLE] ,[LANGUAGE] ,[CAPT_TYPE] ,[STRING1] ,STRING2 ,[ADDED_WHO] ,[OBJ_NAME],INTERNAL) VALUES (@pMODULE,@pTITLE,@pLANG_CODE,@pCAPTION_TYPE,@pSTRING1,@pSTRING2,@pWHO,@pOBJ_NAME,@pINTERNAL) ELSE UPDATE [dbo].[TBDD_GUI_LANGUAGE_PHRASE] SET [CAPT_TYPE] = @pCAPTION_TYPE ,[STRING1] = @pSTRING1 ,STRING2 = @pSTRING2 ,CHANGED_WHO = @pWHO ,[OBJ_NAME] = @pOBJ_NAME,INTERNAL = @pINTERNAL WHERE [MODULE] = @pMODULE AND TITLE = @pTITLE AND [LANGUAGE] = @pLANG_CODE GO IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE Name = N'ARCHIVE_FOLDER' AND Object_ID = Object_ID(N'dbo.TBDD_EMAIL_ACCOUNT')) BEGIN -- Column Exists ALTER TABLE TBDD_EMAIL_ACCOUNT ADD ARCHIVE_FOLDER VARCHAR(100) NOT NULL DEFAULT '' END GO CREATE TABLE TBDD_LANGUAGE ( GUID TINYINT NOT NULL IDENTITY (1, 1), LANG_CODE VARCHAR(10) NOT NULL, CREATE_DEFAULT_ENTRY BIT NOT NULL DEFAULT 0, COMMENT VARCHAR(1000), ADDED_WHO VARCHAR(30) NOT NULL DEFAULT 'SYSTEM', ADDED_WHEN DATETIME NOT NULL DEFAULT (GETDATE()), CHANGED_WHO VARCHAR(30), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_LANGUAGE PRIMARY KEY (GUID), CONSTRAINT UQ_TBDD_LANGUAGE UNIQUE (LANG_CODE) ) GO CREATE TRIGGER TBDD_LANGUAGE_AFT_UPD ON TBDD_LANGUAGE FOR UPDATE AS UPDATE TBDD_LANGUAGE SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_LANGUAGE.GUID = INSERTED.GUID GO INSERT INTO TBDD_LANGUAGE (LANG_CODE,CREATE_DEFAULT_ENTRY) VALUES ('de-DE',1); INSERT INTO TBDD_LANGUAGE (LANG_CODE,CREATE_DEFAULT_ENTRY) VALUES ('en-EN',1); INSERT INTO TBDD_LANGUAGE (LANG_CODE,CREATE_DEFAULT_ENTRY) VALUES ('fr-FR',1); GO IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE Name = N'LANGUAGE_OVERRIDE' AND Object_ID = Object_ID(N'dbo.TBDD_USER_MODULE_LOG_IN')) BEGIN -- Column Exists ALTER TABLE TBDD_USER_MODULE_LOG_IN ADD LANGUAGE_OVERRIDE VARCHAR(5) NOT NULL DEFAULT '' END ELSE PRINT 'COLUMN LANGUAGE_OVERRIDE EXISTS' GO IF NOT EXISTS(SELECT 1 FROM sys.columns WHERE Name = N'LANGUAGE_OVERRIDE' AND Object_ID = Object_ID(N'dbo.TBDD_USER_LOGIN_OUT')) BEGIN -- Column Exists ALTER TABLE TBDD_USER_LOGIN_OUT ADD LANGUAGE_OVERRIDE VARCHAR(5) NOT NULL DEFAULT '' END ELSE PRINT 'COLUMN LANGUAGE_OVERRIDE EXISTS' GO CREATE TABLE TBDD_USER_LOG_IN_ATTEMPT( GUID BIGINT IDENTITY(1,1) NOT NULL, USERNAME VARCHAR(100), MODULE VARCHAR(30), APP_STARTUP_PATH VARCHAR(1000), VERSION_CLIENT VARCHAR(30), MACHINE_NAME VARCHAR(250), OVERRIDE_LANGUAGE VARCHAR(5), [LOGIN] DATETIME DEFAULT (GETDATE()), CONSTRAINT [PK_TBDD_USER_LOG_IN_ATTEMPT] PRIMARY KEY(GUID)) GO CREATE TABLE TBDD_USER_CHANGE_LOG( GUID BIGINT IDENTITY(1,1) NOT NULL, USR_ID INTEGER NOT NULL, COMMENT VARCHAR(3000), CONSTRAINT [PK_TBDD_USER_CHANGE_LOG] PRIMARY KEY(GUID)) GO CREATE TRIGGER [dbo].[TBDD_USER_AFT_UPD_LOG] ON [dbo].[TBDD_USER] FOR UPDATE AS BEGIN DECLARE @USRNAME VARCHAR(50),@LANGUAGE VARCHAR(5),@CHANGED_WHO VARCHAR(100),@USR_ID INTEGER, @COMMENT VARCHAR(1000) SELECT @USRNAME = USERNAME,@LANGUAGE = LANGUAGE,@CHANGED_WHO = CHANGED_WHO,@USR_ID = GUID FROM inserted IF UPDATE (LANGUAGE) AND @CHANGED_WHO LIKE 'LANG_CHANGE_GUI%' BEGIN SET @COMMENT = 'USER CHANGED LANGUAGE TO [' + @LANGUAGE + ']' INSERT INTO [dbo].[TBDD_USER_CHANGE_LOG] ([USR_ID],[COMMENT]) VALUES (@USR_ID,@COMMENT) END END GO CREATE TABLE TBDD_CATALOG ( GUID INTEGER NOT NULL IDENTITY (1, 1), CAT_TITLE VARCHAR(100) NOT NULL, CAT_STRING VARCHAR(900) NOT NULL, ADDED_WHO VARCHAR(30) NOT NULL DEFAULT 'SYSTEM', ADDED_WHEN DATETIME NOT NULL DEFAULT (GETDATE()), CHANGED_WHO VARCHAR(30), CHANGED_WHEN DATETIME, CONSTRAINT PK_TBDD_CATALOG PRIMARY KEY (GUID), CONSTRAINT UQ_TBDD_CATALOG_TITLE UNIQUE (CAT_TITLE) ) GO CREATE TRIGGER TBDD_CATALOG_USER_AFT_UPD ON TBDD_CATALOG FOR UPDATE AS UPDATE TBDD_CATALOG SET CHANGED_WHEN = GETDATE() FROM INSERTED WHERE TBDD_CATALOG.GUID = INSERTED.GUID GO INSERT INTO [TBDD_CATALOG] (CAT_TITLE,CAT_STRING) VALUES ('DDSUPPORT_PORTAL','https://digitaldata.works/support/'); GO CREATE VIEW [dbo].[VWDD_GROUPS_USER] AS select USR.GUID AS USR_ID ,USR.USERNAME, GRP.GUID AS GRP_ID ,GRP.NAME AS GRP_NAME ,GU.ADDED_WHEN ,GU.ADDED_WHO from dd_ecm.dbo.TBDD_GROUPS GRP INNER JOIN TBDD_GROUPS_USER GU ON GRP.GUID = GU.GROUP_ID INNER JOIN TBDD_USER USR ON GU.USER_ID = USR.GUID WHERE USR.ACTIVE = 1 GO