diff --git a/current/[DD_ECM]-Database/DEX_SQL/Fehlercodes.md b/current/[DD_ECM]-Database/DEX_SQL/Fehlercodes.md new file mode 100644 index 0000000..14fe5a7 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/Fehlercodes.md @@ -0,0 +1,84 @@ +# Fehlercodes DEX + +Diese Datei beschreibt die aktuell im Quelltext verwendeten Fehlercodes des DEX-Moduls. +Stand der Analyse: 24.02.2026. + +## Aktive Fehlercodes (im SQL-Code gefunden) + +| Fehlercode | Quelle(n) | Bedeutung / Hinweis | +|---:|---|---| +| 50000 | Mehrere Prozeduren (CATCH-Fallback) | Allgemeiner Fallback-Fehler (`CASE ... ELSE 50000`). Details stehen in `ERROR_MESSAGE()` und im Log. | +| 50001 | `PRDEX_GET_INPUT`, `PRDEX_GET_INPUT_CONTENT`, `PRDEX_WRITE_OUTPUT` | Ungültige Query (z. B. zu kurz, < 15 Zeichen) bzw. fehlerhafte Query-Konfiguration. | +| 50002 | `PRDEX_GET_INPUT` | Keine verarbeitbaren Daten gefunden (ggf. bereits verarbeitet/exportiert). | +| 50003 | `PRDEX_CHECK_SYSTEM` | Keine gültige Modul-Lizenz gefunden. | +| 50004 | `PRDEX_START_PROFILE_EXECUTION` | Ungültige Profil-/Laufzeitkonfiguration (`@PROFILE_NAME`, `@MANDANTOR`, `@EXPORT_TYPE`, `@LANGUAGE`, `@LOG_LEVEL`). | +| 50005 | `PRDEX_SET_QUERY` | Keine ausreichenden Datenzeilen in `TBDEX_TMP_QUERY` gefunden. | +| 50006 | `PRDEX_RUN_MAINPROCESSING` | Temporäre Content-Tabelle konnte nicht erstellt werden. | +| 50007 | `PRDEX_GET_INPUT_CONTENT` | Unzureichende Daten in `TBDEX_TMP_PROCESS_REFERENCES` und/oder `TBDEX_TMP_QUERY`. | +| 50008 | `PRDEX_REGISTER_PROCESS` | Prozess ist bereits registriert (Duplicate). | +| 50010 | `PRDEX_RUN_MAINPROCESSING`, `PRDEX_START_PROFILE_EXECUTION` | Inkonsistenter/vermisster Verarbeitungszustand (z. B. fehlende Prozessreferenzen bzw. ungültige TMP-Tabellen-Konfiguration). | +| 50012 | `PRDEX_CHECK_SYSTEM` | SQL-Server-Version zu alt / Mindestversion nicht erfüllt. | +| 50013 | `PRDEX_CHECK_SYSTEM` | Fehlende DB-Berechtigung (`CONTROL`) für den ausführenden User. | +| 50014 | `PRDEX_CHECK_SYSTEM` | Erforderliche DEX-Objekte (Tabellen/Views/Prozeduren/Funktionen) fehlen. | +| 50015 | `PRDEX_WRITE_LOG` | Logging-Zieltabelle nicht vorhanden oder nicht zugreifbar. | +| 50016 | `PRDEX_START_PROFILE_EXECUTION` | Profil ist offline oder nicht vorhanden. | +| 50017 | `PRDEX_RUN_PREPROCESSING` | Fehler in der Preprocessing-Ausführung. | +| 50018 | `PRDEX_RUN_POSTPROCESSING` | Fehler in der Postprocessing-Ausführung. | +| 50019 | `PRDEX_SET_EXPORT_NUMBER` | Kein gültiger Nummernkreis gefunden (Erstellversuch wird eingeleitet). | +| 50020 | `PRDEX_SET_EXPORT_NUMBER` | Nummernkreis konnte nicht gültig ermittelt/angelegt werden. | +| 50021 | `PRDEX_SET_EXPORT_NUMBER` | Gefundener Nummernkreis ist inaktiv. | +| 50022 | `PRDEX_RUN_MAINPROCESSING` | Export-Spaltenkonfiguration (`TBDEX_CFG_OUT_STRUCTURE`) unzureichend/ungültig. | +| 50023 | `PRDEX_START_PROFILE_EXECUTION` | Ungültige `BATCH_ID` (Mindestlänge nicht erreicht). | +| 50024 | `PRDEX_REGISTER_PROCESS` | Prozess ist bereits in `TBDEX_TMP_PROCESS_REFERENCES` registriert (Duplicate). | +| 50025 | `PRDEX_SET_EXPORT_NUMBER` | Prozesszeile in `TBDEX_TMP_PROCESS` fehlt. | +| 50026 | `PRDEX_SET_EXPORT_NUMBER` | Prozessreferenzen in `TBDEX_TMP_PROCESS_REFERENCES` fehlen. | +| 50027 | `PRDEX_SET_EXPORT_NUMBER` | Nummernkreis-Lock konnte nicht stabil erreicht werden (Retry/Timeout-Szenario). | +| 50028 | `PRDEX_SET_EXPORT_NUMBER` | Nummernkreis konnte nicht gesperrt werden. | +| 50029 | `PRDEX_REGISTER_PROCESS` | Nach Insert ist die erwartete Einzelzeile in `TBDEX_TMP_PROCESS` nicht vorhanden. | +| 50051 | `PRDEX_GET_INPUT` | Unsicherer Query-Inhalt erkannt (unaufgelöste Placeholder oder verbotene SQL-Muster). | +| 50052 | `PRDEX_SET_QUERY` | Unsicherer Query-Inhalt erkannt (unaufgelöste Placeholder oder verbotene SQL-Muster). | +| 50054 | `PRDEX_WRITE_OUTPUT` | Unsicherer Query-Inhalt erkannt (unaufgelöste Placeholder oder verbotene SQL-Muster). | +| 50055 | `PRDEX_RUN_PREPROCESSING` | Unsicherer Query-Inhalt erkannt (unaufgelöste Placeholder oder verbotene SQL-Muster). | +| 50056 | `PRDEX_RUN_POSTPROCESSING` | Unsicherer Query-Inhalt erkannt (unaufgelöste Placeholder oder verbotene SQL-Muster). | +| 50057 | `PRDEX_RUN_MAINPROCESSING` | Unsicherer/inkonsistenter dynamischer Query-Inhalt oder Temp-Target-Konfiguration. | +| 50058 | `PRDEX_WRITE_OUTPUT` | `EXPORT_NUMBER`-Mapping für Output-Referenzen konnte nicht aufgelöst werden. | + +## Empfohlene Sofortmaßnahme je Fehlercode + +| Fehlercode | Empfohlene Sofortmaßnahme (erste 5–10 Minuten) | +|---:|---| +| 50000 | Letzten `ERROR_MESSAGE()`-Eintrag und `TBDEX_RUN_LOG` für `PROFILE_ID`/`BATCH_ID` prüfen; danach auf den ersten fachlichen Code zurückverfolgen. | +| 50001 | Verwendete Query (`START`/`MAIN`/`END`) und Platzhalterauflösung prüfen; Konfiguration in `TBDEX_CFG_RESOURCES` und direkte Querylänge validieren. | +| 50002 | Prüfen, ob Input bereits verarbeitet wurde (`VWDEX_OUT`) oder Startquery keine Daten liefert; Testweise Startquery separat ausführen. | +| 50003 | Lizenzdaten in `TBDD_MODULES` für DEX (`SHORT_NAME`) und `ACTIVE`/`LICENSE` kontrollieren. | +| 50004 | Profilstammdaten in `TBDEX_CFG_PROFILE` auf Pflichtfelder und konsistente Werte prüfen. | +| 50005 | Inhalt in `TBDEX_TMP_QUERY` für aktuellen Batch prüfen (erzeugte Main-Query vorhanden?). | +| 50006 | Generiertes `CREATE TABLE`-Statement aus `TBDEX_TMP_PROCESS` prüfen und manuell gegen Berechtigungen/Objektnamen testen. | +| 50007 | Für den Batch prüfen, ob `TBDEX_TMP_PROCESS_REFERENCES` und `TBDEX_TMP_QUERY` befüllt sind und gleiche Batch-/Profile-Filter verwenden. | +| 50008 | Doppelte Batch-Registrierung in `TBDEX_TMP_PROCESS`/`TBDEX_TMP_PROCESS_REFERENCES` prüfen; ggf. mit `PRDEX_CLEAN_UP` bereinigen. | +| 50010 | Prozesskette bis Mainprocessing prüfen: fehlen Prozessreferenzen oder TMP-Tabellenmetadaten im aktuellen Batch? | +| 50012 | SQL-Server-Version gegen Mindestversion abgleichen; ggf. auf unterstützte Instanz wechseln. | +| 50013 | Ausführenden DB-User prüfen und fehlende `CONTROL`-Rechte auf die Ziel-DB setzen. | +| 50014 | Fehlende DEX-Objekte gemäß Systemcheck nachdeployen (Tabellen, Views, Prozeduren, Funktionen). | +| 50015 | Existenz/Zugriff auf `TBDEX_RUN_LOG` prüfen; Rechte und Schema (`dbo`) verifizieren. | +| 50016 | Profilstatus in `VWDEX_PROFILE`/`TBDEX_CFG_PROFILE` prüfen (`ACTIVE=1`). | +| 50017 | Preprocessing-Query aus `TBDEX_CFG_RESOURCES` isoliert ausführen und auf SQL-/Placeholder-Fehler prüfen. | +| 50018 | Postprocessing-Query aus `TBDEX_CFG_RESOURCES` isoliert ausführen und auf SQL-/Placeholder-Fehler prüfen. | +| 50019 | `TBDEX_RUN_NUMBER_RANGE` auf passenden aktiven Satz für Profil/Schema/Datum prüfen. | +| 50020 | Anlage-/Ermittlungspfad des Nummernkreises prüfen; Konflikte mit Parallelprozessen ausschließen. | +| 50021 | Nummernkreis aktivieren (`ACTIVE=1`) oder korrektes `EXPORT_NUMBER_SCHEMA` im Profil setzen. | +| 50022 | Exportspalten-Setup in `TBDEX_CFG_OUT_STRUCTURE` auf Vollständigkeit (`PATH_OR_COLUMN`, `DATA_TYPE`, `SEQUENCE`) prüfen. | +| 50023 | Batch-ID-Quelle prüfen (`FNDEX_GET_NEXT_BATCH_ID` bzw. Inputparameter), Mindestlänge sicherstellen. | +| 50024 | Doppelte Referenzregistrierung im Batch prüfen; alte Restdaten in TMP-Tabellen entfernen. | +| 50025 | Prüfen, ob `PRDEX_REGISTER_PROCESS` erfolgreich lief und `TBDEX_TMP_PROCESS`-Satz für Batch vorhanden ist. | +| 50026 | Prüfen, ob `PRDEX_GET_INPUT` Referenzen für den Batch in `TBDEX_TMP_PROCESS_REFERENCES` geschrieben hat. | +| 50027 | Lock-/Deadlock-Situation im Nummernkreis prüfen; parallele Läufe für gleiches Profil temporär reduzieren. | +| 50028 | Sperrfehler im Nummernkreis prüfen (offene Transaktionen, Blocker, Deadlocks). | +| 50029 | Nach Insert die Eindeutigkeit/Filter für `TBDEX_TMP_PROCESS` prüfen (Profil+Batch). | +| 50051 | Unsichere/ungeklärte Platzhalter in Startquery prüfen und verbotene SQL-Muster entfernen. | +| 50052 | Unsichere/ungeklärte Platzhalter in Mainquery prüfen und verbotene SQL-Muster entfernen. | +| 50054 | Unsichere/ungeklärte Platzhalter in Endquery prüfen und verbotene SQL-Muster entfernen. | +| 50055 | Preprocessing-Statements auf unaufgelöste Tokens und gesperrte SQL-Muster prüfen. | +| 50056 | Postprocessing-Statements auf unaufgelöste Tokens und gesperrte SQL-Muster prüfen. | +| 50057 | Dynamische Temp-Statements in Mainprocessing vollständig ausgeben und auf Placeholder-/Targetfehler prüfen. | +| 50058 | Mapping `TBDEX_OUT` ↔ `TBDEX_TMP_PROCESS_REFERENCES` für den Batch prüfen (Referenzfelder + `EXPORT_NUMBER`). | \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[FNDEX_GET_NEXT_BATCH_ID].sql b/current/[DD_ECM]-Database/DEX_SQL/[FNDEX_GET_NEXT_BATCH_ID].sql new file mode 100644 index 0000000..edfb9aa Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[FNDEX_GET_NEXT_BATCH_ID].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[FNDEX_GET_NEXT_EXPORT_NUMBER].sql b/current/[DD_ECM]-Database/DEX_SQL/[FNDEX_GET_NEXT_EXPORT_NUMBER].sql new file mode 100644 index 0000000..ddabd8f --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[FNDEX_GET_NEXT_EXPORT_NUMBER].sql @@ -0,0 +1,318 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [FNDEX_GET_NEXT_EXPORT_NUMBER] +-- ================================================================= +-- Table function to get next available export number. +-- +-- Returns: table with one row +-- ================================================================= +-- Copyright (c) 2025 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: 01.08.2025 / MK +-- Version Date / Editor: 01.08.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 01.08.2025 / MK - First Version + +CREATE OR ALTER FUNCTION [dbo].[FNDEX_GET_NEXT_EXPORT_NUMBER]( + @pPROFILE_ID BIGINT, + @pTEST_MODE BIT, + @pASYNC_MODE BIT, + @pBATCH_ID NVARCHAR(25), + @pBATCH_CREATOR NVARCHAR(50), + @pLANGUAGE NVARCHAR(10), + @pLOG_LEVEL NVARCHAR(25), + @pFORCE BIT, + @pPROFILE_NAME NVARCHAR(50), + @pMANDANTOR NVARCHAR(50), + @pEXPORT_TYPE NVARCHAR(50), + @pEXPORT_NUMBER_SCHEMA NVARCHAR(25), + @pDEFAULT_DATA_SEPARATOR NVARCHAR(10), + @pREFERENCE1 NVARCHAR(150), + @pREFERENCE2 NVARCHAR(150), + @pREFERENCE3 NVARCHAR(150), + @pREFERENCE4 NVARCHAR(150), + @pREFERENCE5 NVARCHAR(150), + @pEXTERNAL_REFERENCE1 NVARCHAR(2000), + @pEXTERNAL_REFERENCE2 NVARCHAR(2000), + @pEXTERNAL_REFERENCE3 NVARCHAR(2000), + @pEXTERNAL_REFERENCE4 NVARCHAR(2000), + @pEXTERNAL_REFERENCE5 NVARCHAR(2000) +) +RETURNS @vTBDEX_RUN_NUMBER_RANGE TABLE ( + [GUID] BIGINT NOT NULL, + [PROFILE_ID] BIGINT NOT NULL, + [ACTIVE] BIT NOT NULL, + [EXPORT_NUMBER_SCHEMA] NVARCHAR(25) NULL, + [EXPORT_NUMBER_COUNTER] BIGINT NULL, + [EXPORT_NUMBER] NVARCHAR(25) NULL, + [NEXT_EXPORT_NUMBER_COUNTER] BIGINT NULL, + [NEXT_EXPORT_NUMBER] NVARCHAR(25) NULL +) +AS +BEGIN + + -- declare new vars because of parameter sniffing + DECLARE @PROFILE_ID BIGINT = @pPROFILE_ID, + @TEST_MODE BIT = @pTEST_MODE, + @ASYNC_MODE BIT = @pASYNC_MODE, + @BATCH_ID NVARCHAR(25) = @pBATCH_ID, + @BATCH_CREATOR NVARCHAR(128) = ISNULL(@pBATCH_CREATOR,OBJECT_NAME(@@PROCID)), + @LANGUAGE NVARCHAR(10) = @pLANGUAGE, + @LOG_LEVEL NVARCHAR(25) = UPPER(ISNULL(@pLOG_LEVEL,'INFO')), + @FORCE BIT = @pFORCE, + @PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME, + @MANDANTOR NVARCHAR(50) = @pMANDANTOR, + @EXPORT_TYPE NVARCHAR(50) = @pEXPORT_TYPE, + @EXPORT_NUMBER_SCHEMA NVARCHAR(50) = @pEXPORT_NUMBER_SCHEMA, + @DEFAULT_DATA_SEPARATOR NVARCHAR(10) = @pDEFAULT_DATA_SEPARATOR, + @REFERENCE1 NVARCHAR(150) = @pREFERENCE1, + @REFERENCE2 NVARCHAR(150) = @pREFERENCE2, + @REFERENCE3 NVARCHAR(150) = @pREFERENCE3, + @REFERENCE4 NVARCHAR(150) = @pREFERENCE4, + @REFERENCE5 NVARCHAR(150) = @pREFERENCE5, + @EXTERNAL_REFERENCE1 NVARCHAR(2000) = @pEXTERNAL_REFERENCE1, + @EXTERNAL_REFERENCE2 NVARCHAR(2000) = @pEXTERNAL_REFERENCE2, + @EXTERNAL_REFERENCE3 NVARCHAR(2000) = @pEXTERNAL_REFERENCE3, + @EXTERNAL_REFERENCE4 NVARCHAR(2000) = @pEXTERNAL_REFERENCE4, + @EXTERNAL_REFERENCE5 NVARCHAR(2000) = @pEXTERNAL_REFERENCE5; + + -- Special for Calculation + DECLARE @WORK_VALUE NVARCHAR(50) = NULL, + @LoopCounter INT = 1, + @len INT = 0, + @bestStart INT = 0, + @bestLen INT = 0, + @curStart INT = 0, + @curLen INT = 0, + @numericStart INT = 0, + @numericLength INT = 0, + @numericText NVARCHAR(50) = NULL, + @numericValue BIGINT = 0, + @nextNumericString BIGINT = 0, + @nextNumericInt BIGINT = 0, + @nextNumericPadded NVARCHAR(50) = NULL; + + -- declare runtime vars + DECLARE @MY_FUNCTION_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ACTIVE_FLAG BIT = 1, + @INACTIVE_FLAG BIT = 0, + @GUID BIGINT = NULL, + @ACTIVE BIT = NULL, + @EXPORT_NUMBER_COUNTER BIGINT = NULL, + @EXPORT_NUMBER NVARCHAR(25) = NULL, + @NEXT_EXPORT_NUMBER_COUNTER BIGINT = NULL, + @NEXT_EXPORT_NUMBER NVARCHAR(25) = NULL, + @DATE_TODAY DATE = CONVERT(date, getdate()), + @PLACEHOLDER_NAME NVARCHAR(50) = NULL, + @PLACEHOLDER NVARCHAR(MAX) = NULL, + @PLACEHOLDER_TYPE NVARCHAR(10) = 'CONST'; + + --==================================================-- Work copy from table --===================================================-- + SELECT TOP 1 @GUID = [GUID], + @ACTIVE = [ACTIVE], + @EXPORT_NUMBER_COUNTER = [EXPORT_NUMBER_COUNTER], + @EXPORT_NUMBER = [EXPORT_NUMBER], + @NEXT_EXPORT_NUMBER_COUNTER = NULL, + @NEXT_EXPORT_NUMBER = NULL + FROM [TBDEX_RUN_NUMBER_RANGE] WITH (READPAST) + WHERE [PROFILE_ID] = @PROFILE_ID + AND [ACTIVE] in (@ACTIVE_FLAG,@INACTIVE_FLAG) + AND [EXPORT_NUMBER_SCHEMA] = @EXPORT_NUMBER_SCHEMA + AND (([VALID_FROM] IS NULL AND [VALID_TO] IS NULL) + OR (@DATE_TODAY BETWEEN [VALID_FROM] AND [VALID_TO])) + ORDER BY [GUID] DESC; -- take the newest line if there are multiple + ----------------------------------------------------------------------------------------------------------------------------------- + + + --=============================================-- Exit if there is no valid line --==============================================-- + IF (@GUID IS NULL) BEGIN + RETURN; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --==================================================-- Calculate next number --==================================================-- + SET @WORK_VALUE = COALESCE(NULLIF(@EXPORT_NUMBER_SCHEMA,''), NULLIF(@EXPORT_NUMBER,''), ''); + SET @len = LEN(@WORK_VALUE); + + WHILE (@LoopCounter <= @len) BEGIN + IF (SUBSTRING(@WORK_VALUE, @LoopCounter, 1) LIKE '[0-9]') BEGIN + + IF @curLen = 0 BEGIN + SET @curStart = @LoopCounter; + END; + + SET @curLen += 1; + + IF @curLen > @bestLen BEGIN + SET @bestLen = @curLen; + SET @bestStart = @curStart; + END; + + END; ELSE BEGIN + SET @curLen = 0; + END; + + SET @LoopCounter += 1; + + END; + + SET @numericStart = @bestStart; + SET @numericLength = @bestLen; + SET @numericText = CASE + WHEN @numericLength > 0 + THEN SUBSTRING(@WORK_VALUE, @numericStart, @numericLength) + + ELSE '' + END; + SET @numericValue = CASE + WHEN @numericLength > 0 + THEN TRY_CAST(@numericText AS BIGINT) + + ELSE NULL + END; + + -- base current number from counter if available, else from parsed value + IF (TRY_CAST(@EXPORT_NUMBER_COUNTER AS BIGINT) IS NOT NULL) BEGIN + SET @nextNumericInt = TRY_CAST(@EXPORT_NUMBER_COUNTER AS BIGINT); + END ELSE IF (@numericValue IS NOT NULL) BEGIN + SET @nextNumericInt = @numericValue; + END ELSE BEGIN + SET @nextNumericInt = 0; + END; + + SET @nextNumericInt = @nextNumericInt + 1; -- increment + SET @nextNumericString = @nextNumericInt; + + SET @nextNumericPadded = CASE + WHEN @numericLength > 0 + THEN RIGHT(REPLICATE('0', @numericLength) + CAST(@nextNumericInt AS NVARCHAR(50)), @numericLength) + + ELSE CAST(@nextNumericInt AS NVARCHAR(50)) + END; + + IF (@numericLength = 0) BEGIN + SET @NEXT_EXPORT_NUMBER = @WORK_VALUE + @nextNumericPadded; + END ELSE BEGIN + SET @NEXT_EXPORT_NUMBER = STUFF(@WORK_VALUE, @numericStart, @numericLength, @nextNumericPadded); + END; + + SET @NEXT_EXPORT_NUMBER_COUNTER = @nextNumericInt; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --=================================================-- Handle placeholders 1/2 --=================================================-- + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%PROFILE_ID%',ISNULL(@PROFILE_ID,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%TEST_MODE%',ISNULL(@TEST_MODE,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%ASYNC_MODE%',ISNULL(@ASYNC_MODE,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%BATCH_ID%',ISNULL(@BATCH_ID,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%BATCH_CREATOR%',ISNULL(@BATCH_CREATOR,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%LANGUAGE%',ISNULL(@LANGUAGE,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%LOG_LEVEL%',ISNULL(@LOG_LEVEL,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%FORCE%',ISNULL(@FORCE,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%MY_PROCEDURE_NAME%',ISNULL(@MY_FUNCTION_NAME,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%MY_FUNCTION_NAME%',ISNULL(@MY_FUNCTION_NAME,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%PROFILE_NAME%',ISNULL(@PROFILE_NAME,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%MANDANTOR%',ISNULL(@MANDANTOR,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%EXPORT_TYPE%',ISNULL(@EXPORT_TYPE,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%EXPORT_NUMBER_SCHEMA%',ISNULL(@EXPORT_NUMBER_SCHEMA,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%DEFAULT_DATA_SEPARATOR%',ISNULL(@DEFAULT_DATA_SEPARATOR,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%REFERENCE1%',ISNULL(@REFERENCE1,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%REFERENCE2%',ISNULL(@REFERENCE2,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%REFERENCE3%',ISNULL(@REFERENCE3,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%REFERENCE4%',ISNULL(@REFERENCE4,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%REFERENCE5%',ISNULL(@REFERENCE5,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%EXTERNAL_REFERENCE1%',ISNULL(@EXTERNAL_REFERENCE1,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%EXTERNAL_REFERENCE2%',ISNULL(@EXTERNAL_REFERENCE2,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%EXTERNAL_REFERENCE3%',ISNULL(@EXTERNAL_REFERENCE3,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%EXTERNAL_REFERENCE4%',ISNULL(@EXTERNAL_REFERENCE4,'')); + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,'%EXTERNAL_REFERENCE5%',ISNULL(@EXTERNAL_REFERENCE5,'')); + + DECLARE CURSOR_PLACEHOLDER CURSOR + LOCAL FAST_FORWARD FOR + SELECT [PLACEHOLDER_NAME] as 'Placeholder_Name', [PLACEHOLDER] as 'Placeholder' + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @PLACEHOLDER_TYPE + ORDER BY [SEQUENCE] ASC; + + OPEN CURSOR_PLACEHOLDER + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @EXPORT_NUMBER_SCHEMA = REPLACE(@EXPORT_NUMBER_SCHEMA,concat('%',@PLACEHOLDER_NAME,'%'),ISNULL(@PLACEHOLDER,'')); + + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + END + CLOSE CURSOR_PLACEHOLDER; + DEALLOCATE CURSOR_PLACEHOLDER; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --=================================================-- Handle placeholders 2/2 --=================================================-- + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%PROFILE_ID%',ISNULL(@PROFILE_ID,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%TEST_MODE%',ISNULL(@TEST_MODE,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%ASYNC_MODE%',ISNULL(@ASYNC_MODE,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%BATCH_ID%',ISNULL(@BATCH_ID,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%BATCH_CREATOR%',ISNULL(@BATCH_CREATOR,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%LANGUAGE%',ISNULL(@LANGUAGE,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%LOG_LEVEL%',ISNULL(@LOG_LEVEL,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%FORCE%',ISNULL(@FORCE,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%MY_PROCEDURE_NAME%',ISNULL(@MY_FUNCTION_NAME,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%MY_FUNCTION_NAME%',ISNULL(@MY_FUNCTION_NAME,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%PROFILE_NAME%',ISNULL(@PROFILE_NAME,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%MANDANTOR%',ISNULL(@MANDANTOR,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%EXPORT_TYPE%',ISNULL(@EXPORT_TYPE,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%EXPORT_NUMBER_SCHEMA%',ISNULL(@EXPORT_NUMBER_SCHEMA,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%DEFAULT_DATA_SEPARATOR%',ISNULL(@DEFAULT_DATA_SEPARATOR,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%REFERENCE1%',ISNULL(@REFERENCE1,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%REFERENCE2%',ISNULL(@REFERENCE2,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%REFERENCE3%',ISNULL(@REFERENCE3,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%REFERENCE4%',ISNULL(@REFERENCE4,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%REFERENCE5%',ISNULL(@REFERENCE5,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%EXTERNAL_REFERENCE1%',ISNULL(@EXTERNAL_REFERENCE1,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%EXTERNAL_REFERENCE2%',ISNULL(@EXTERNAL_REFERENCE2,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%EXTERNAL_REFERENCE3%',ISNULL(@EXTERNAL_REFERENCE3,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%EXTERNAL_REFERENCE4%',ISNULL(@EXTERNAL_REFERENCE4,'')); + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,'%EXTERNAL_REFERENCE5%',ISNULL(@EXTERNAL_REFERENCE5,'')); + + DECLARE CURSOR_PLACEHOLDER CURSOR + LOCAL FAST_FORWARD FOR + SELECT [PLACEHOLDER_NAME] as 'Placeholder_Name', [PLACEHOLDER] as 'Placeholder' + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @PLACEHOLDER_TYPE + ORDER BY [SEQUENCE] ASC; + + OPEN CURSOR_PLACEHOLDER + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @NEXT_EXPORT_NUMBER = REPLACE(@NEXT_EXPORT_NUMBER,concat('%',@PLACEHOLDER_NAME,'%'),ISNULL(@PLACEHOLDER,'')); + + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + END + CLOSE CURSOR_PLACEHOLDER; + DEALLOCATE CURSOR_PLACEHOLDER; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --======================================================-- insert result --======================================================-- + INSERT INTO @vTBDEX_RUN_NUMBER_RANGE([GUID],[PROFILE_ID],[ACTIVE],[EXPORT_NUMBER_SCHEMA], [EXPORT_NUMBER_COUNTER], + [EXPORT_NUMBER], [NEXT_EXPORT_NUMBER_COUNTER],[NEXT_EXPORT_NUMBER]) + VALUES(@GUID, @PROFILE_ID, @ACTIVE, @EXPORT_NUMBER_SCHEMA, @EXPORT_NUMBER_COUNTER, + @EXPORT_NUMBER, @NEXT_EXPORT_NUMBER_COUNTER, @NEXT_EXPORT_NUMBER); + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN; + +END; +GO \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_CHECK_SYSTEM].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_CHECK_SYSTEM].sql new file mode 100644 index 0000000..dcc89c8 Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_CHECK_SYSTEM].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_CLEAN_UP].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_CLEAN_UP].sql new file mode 100644 index 0000000..fcaf2b0 Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_CLEAN_UP].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_GET_INPUT].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_GET_INPUT].sql new file mode 100644 index 0000000..f49ac59 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_GET_INPUT].sql @@ -0,0 +1,1032 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDEX_GET_INPUT] +-- ================================================================= +-- Collect head informations of export data and +-- +-- Returns: INTEGER; 0 = ok; 0 <> nicht ok +-- ================================================================= +-- Copyright (c) 2025 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: 01.08.2025 / MK +-- Version Date / Editor: 01.08.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 01.08.2025 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_GET_INPUT]( + @pPROFILE_ID BIGINT, + @pTEST_MODE BIT, + @pASYNC_MODE BIT, + @pBATCH_ID NVARCHAR(25), + @pBATCH_CREATOR NVARCHAR(50), + @pLANGUAGE NVARCHAR(10), + @pLOG_LEVEL NVARCHAR(25), + @pSTART_QUERY NVARCHAR(MAX), + @pSTART_QUERY_VAR1 NVARCHAR(50), + @pSTART_QUERY_VAR2 NVARCHAR(50), + @pSTART_QUERY_VAR3 NVARCHAR(50), + @pSTART_QUERY_VAR4 NVARCHAR(50), + @pSTART_QUERY_VAR5 NVARCHAR(50), + @pFORCE BIT, + @pPROFILE_NAME NVARCHAR(50), + @pMANDANTOR NVARCHAR(50), + @pEXPORT_TYPE NVARCHAR(50) +) +AS +BEGIN TRY + + SET NOCOUNT ON; + SET XACT_ABORT ON; + + -- declare new vars because of parameter sniffing + DECLARE @PROFILE_ID BIGINT = @pPROFILE_ID, + @TEST_MODE BIT = @pTEST_MODE, + @ASYNC_MODE BIT = @pASYNC_MODE, + @BATCH_ID NVARCHAR(25) = @pBATCH_ID, + @BATCH_CREATOR NVARCHAR(25) = @pBATCH_CREATOR, + @LANGUAGE NVARCHAR(10) = @pLANGUAGE, + @LOG_LEVEL NVARCHAR(25) = UPPER(ISNULL(@pLOG_LEVEL,'INFO')), + @START_QUERY NVARCHAR(MAX) = @pSTART_QUERY, + @START_QUERY_VAR1 NVARCHAR(50) = @pSTART_QUERY_VAR1, + @START_QUERY_VAR2 NVARCHAR(50) = @pSTART_QUERY_VAR2, + @START_QUERY_VAR3 NVARCHAR(50) = @pSTART_QUERY_VAR3, + @START_QUERY_VAR4 NVARCHAR(50) = @pSTART_QUERY_VAR4, + @START_QUERY_VAR5 NVARCHAR(50) = @pSTART_QUERY_VAR5, + @FORCE BIT = @pFORCE, + @PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME, + @MANDANTOR NVARCHAR(50) = @pMANDANTOR, + @EXPORT_TYPE NVARCHAR(50) = @pEXPORT_TYPE; + + -- declare virtual table for found data + DECLARE @vTBDEX_IN as TABLE ( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [smallint] NOT NULL, + [BATCH_ID] [nvarchar](25) NOT NULL, + [REFERENCE1] [nvarchar](150) NOT NULL, + [REFERENCE2] [nvarchar](150) NULL, + [REFERENCE3] [nvarchar](150) NULL, + [REFERENCE4] [nvarchar](150) NULL, + [REFERENCE5] [nvarchar](150) NULL, + [EXTERNAL_REFERENCE1] [nvarchar](2000) NULL, + [EXTERNAL_REFERENCE2] [nvarchar](2000) NULL, + [EXTERNAL_REFERENCE3] [nvarchar](2000) NULL, + [EXTERNAL_REFERENCE4] [nvarchar](2000) NULL, + [EXTERNAL_REFERENCE5] [nvarchar](2000) NULL, + [TEST_MODE] [bit] NOT NULL, + [ASYNC_MODE] [bit] NOT NULL, + [COMMENT] [nvarchar](150) NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL); + + -- declare runtime vars + DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ACTIVE_FLAG BIT = 1, + @INACTIVE_FLAG BIT = 0, + @ROW_COUNT1 SMALLINT = 0, + @ROW_COUNTER_INPUT SMALLINT = 0, + @QUERY_KEYWORD NVARCHAR(50) = 'QUERY', + @DB_VERSION NVARCHAR(25) = NULL, + @QUERY_GET_INPUT NVARCHAR(MAX) = NULL, + @REFERENCE1 NVARCHAR(150) = 0, + @REFERENCE2 NVARCHAR(150) = NULL, + @REFERENCE3 NVARCHAR(150) = NULL, + @REFERENCE4 NVARCHAR(150) = NULL, + @REFERENCE5 NVARCHAR(150) = NULL, + @EXTERNAL_REFERENCE1 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE2 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE3 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE4 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE5 NVARCHAR(250) = NULL, + @PLACEHOLDER_NAME NVARCHAR(50) = NULL, + @PLACEHOLDER NVARCHAR(MAX) = NULL, + @PLACEHOLDER_TYPE NVARCHAR(10) = 'CONST', + @TBDEX_TMP_TABLE_SCHEMA SYSNAME = SCHEMA_NAME(), + @TBDEX_TMP_TABLE_NAME SYSNAME = CONCAT(N'##TBDEX_TMP_CONTENT_BATCH_',@BATCH_ID), + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME NVARCHAR(150) = NULL, + @TBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX) = NULL, + @TBDEX_TMP_TABLE_DROP_QUERY NVARCHAR(MAX) = NULL, + @TBDEX_TMP_TABLE_CREATE_QUERY NVARCHAR(MAX) = NULL, + @TBDEX_TMP_TABLE_INSERT_QUERY NVARCHAR(MAX) = NULL, + @TBDEX_TMP_TABLE_CONTENT NVARCHAR(MAX) = NULL, + @RETURN_STATUS INT = 0, + @RETURN_STATUS_TEXT NVARCHAR(MAX) = concat('START PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(varchar(50),GETDATE(),120)), + @RETURN_ERROR_TEXT NVARCHAR(MAX) = ''; + + PRINT '===================================================================================================='; + PRINT @RETURN_STATUS_TEXT; + PRINT ''; + PRINT 'PARAMETER01 - @PROFILE_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_ID,'')); + PRINT 'PARAMETER02 - @TEST_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@TEST_MODE,'')); + PRINT 'PARAMETER03 - @ASYNC_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@ASYNC_MODE,'')); + PRINT 'PARAMETER04 - @BATCH_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_ID,'')); + PRINT 'PARAMETER05 - @BATCH_CREATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_CREATOR,'')); + PRINT 'PARAMETER06 - @LANGUAGE: ' + CONVERT(NVARCHAR(50),ISNULL(@LANGUAGE,'')); + PRINT 'PARAMETER07 - @LOG_LEVEL: ' + CONVERT(NVARCHAR(50),ISNULL(@LOG_LEVEL,'')); + PRINT 'PARAMETER08 - @START_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY,'')); + PRINT 'PARAMETER09 - @START_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR1,'')); + PRINT 'PARAMETER10 - @START_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR2,'')); + PRINT 'PARAMETER11 - @START_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR3,'')); + PRINT 'PARAMETER12 - @START_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR4,'')); + PRINT 'PARAMETER13 - @START_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR5,'')); + PRINT 'PARAMETER14 - @FORCE: ' + CONVERT(NVARCHAR(50),ISNULL(@FORCE,'')); + PRINT 'PARAMETER15 - @PROFILE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_NAME,'')); + PRINT 'PARAMETER16 - @MANDANTOR: ' + CONVERT(NVARCHAR(50),ISNULL(@MANDANTOR,'')); + PRINT 'PARAMETER17 - @EXPORT_TYPE: ' + CONVERT(NVARCHAR(50),ISNULL(@EXPORT_TYPE,'')); + PRINT ''; + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- Get first sql query --===================================================-- + IF (((UPPER(@START_QUERY) LIKE 'SELECT%') OR (UPPER(@START_QUERY) LIKE '%SELECT%')) AND (UPPER(@START_QUERY) LIKE '%FROM%')) BEGIN + + SET @QUERY_GET_INPUT = LTRIM(RTRIM(@START_QUERY)); + + END; ELSE IF ((SELECT count(*) + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG + AND LTRIM(RTRIM([PLACEHOLDER_NAME])) = @START_QUERY AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @QUERY_KEYWORD) >= 1) BEGIN + + SET @QUERY_GET_INPUT = (SELECT TOP 1 LTRIM(RTRIM([PLACEHOLDER])) + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (@PROFILE_ID,0) AND [ACTIVE] = @ACTIVE_FLAG + AND LTRIM(RTRIM([PLACEHOLDER_NAME])) = @START_QUERY AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @QUERY_KEYWORD + ORDER BY [PROFILE_ID] ASC,[GUID] DESC); + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --=================================================-- Check first sql query --===================================================-- + IF (LEN(@QUERY_GET_INPUT) < 15) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50001; + SET @RETURN_STATUS_TEXT = concat('Wrong call or configuraton!',''); + SET @RETURN_ERROR_TEXT = concat('Found no valid querys (query needs to be 15 chars or more)!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found "@QUERY_GET_INPUT" query: ',char(13),@QUERY_GET_INPUT); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- Handle placeholders --==================================================-- + PRINT ''; + PRINT 'Replacing placeholders in query...'; + + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%PROFILE_ID%',ISNULL(@PROFILE_ID,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%TEST_MODE%',ISNULL(@TEST_MODE,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%ASYNC_MODE%',ISNULL(@ASYNC_MODE,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%BATCH_ID%',ISNULL(@BATCH_ID,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%BATCH_CREATOR%',ISNULL(@BATCH_CREATOR,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%LANGUAGE%',ISNULL(@LANGUAGE,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%LOG_LEVEL%',ISNULL(@LOG_LEVEL,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%START_QUERY%',ISNULL(@START_QUERY,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%START_QUERY_VAR1%',ISNULL(@START_QUERY_VAR1,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%START_QUERY_VAR2%',ISNULL(@START_QUERY_VAR2,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%START_QUERY_VAR3%',ISNULL(@START_QUERY_VAR3,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%START_QUERY_VAR4%',ISNULL(@START_QUERY_VAR4,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%START_QUERY_VAR5%',ISNULL(@START_QUERY_VAR5,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%FORCE%',ISNULL(@FORCE,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%MY_PROCEDURE_NAME%',ISNULL(@MY_PROCEDURE_NAME,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%PROFILE_NAME%',ISNULL(@PROFILE_NAME,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%MANDANTOR%',ISNULL(@MANDANTOR,'')); + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,'%EXPORT_TYPE%',ISNULL(@EXPORT_TYPE,'')); + + DECLARE CURSOR_PLACEHOLDER CURSOR + LOCAL FAST_FORWARD FOR + SELECT [PLACEHOLDER_NAME] as 'Placeholder_Name', [PLACEHOLDER] as 'Placeholder' + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @PLACEHOLDER_TYPE + ORDER BY [SEQUENCE] ASC; + + OPEN CURSOR_PLACEHOLDER + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @QUERY_GET_INPUT = REPLACE(@QUERY_GET_INPUT,concat('%',@PLACEHOLDER_NAME,'%'),ISNULL(@PLACEHOLDER,'')); + + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + END + CLOSE CURSOR_PLACEHOLDER; + DEALLOCATE CURSOR_PLACEHOLDER; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('The final processed "@QUERY_GET_INPUT" query: ',char(13),@QUERY_GET_INPUT); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Safety checks --======================================================-- + EXEC [PRDEX_TEST_DYNAMIC_SQL] @pQUERY = @QUERY_GET_INPUT, + @pRETURN_STATUS = 50051, + @pQUERY_NAME = N'@QUERY_GET_INPUT'; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- run insert statement --===================================================-- + INSERT INTO @vTBDEX_IN([PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [TEST_MODE],[ASYNC_MODE],[COMMENT],[ADDED_WHO],[ADDED_WHEN]) + EXEC sp_executesql @QUERY_GET_INPUT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Result saved to temp table!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ---------------------------------------------------------------------------------------------------------------------------------- + + --==========================================-- Count how many files are there now --===========================================-- + SET @ROW_COUNT1 = ISNULL((SELECT count(*) FROM @vTBDEX_IN WHERE [PROFILE_ID] = @PROFILE_ID AND [BATCH_ID] = @BATCH_ID),0); + IF (@ROW_COUNT1 < 1) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50002; + SET @RETURN_STATUS_TEXT = concat('Maybe docs/data are already processed!?',char(13), + '1. Check view [VWDEX_OUT]',char(13), + '2. Check tables [TBDEX_IN] and [TBDEX_TMP_PROCESS]',char(13), + '3. Check the file status',char(13)); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found: ',convert(nvarchar(100),@ROW_COUNT1),' data rows to process!'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + + --========================================-- Print files which should be processed --==========================================-- + + BEGIN TRANSACTION; + + DECLARE CURSOR_INPUT CURSOR + LOCAL FAST_FORWARD FOR + SELECT [REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5] + FROM @vTBDEX_IN + WHERE [PROFILE_ID] = @PROFILE_ID AND [BATCH_ID] = @BATCH_ID; + + OPEN CURSOR_INPUT + FETCH NEXT FROM CURSOR_INPUT INTO @REFERENCE1,@REFERENCE2,@REFERENCE3,@REFERENCE4,@REFERENCE5,@EXTERNAL_REFERENCE1,@EXTERNAL_REFERENCE2,@EXTERNAL_REFERENCE3,@EXTERNAL_REFERENCE4,@EXTERNAL_REFERENCE5; + WHILE @@FETCH_STATUS = 0 + BEGIN + SET @ROW_COUNTER_INPUT = @ROW_COUNTER_INPUT + 1; + + PRINT '' + char(13) + 'Processing data in BATCH_ID: ' + CONVERT(NVARCHAR(25),@BATCH_ID); + PRINT 'REFERENCE1: ' + ISNULL(CONVERT(NVARCHAR(150),@REFERENCE1),''); + PRINT 'REFERENCE2: ' + ISNULL(CONVERT(NVARCHAR(150),@REFERENCE2),''); + PRINT 'REFERENCE3: ' + ISNULL(CONVERT(NVARCHAR(150),@REFERENCE3),''); + PRINT 'REFERENCE4: ' + ISNULL(CONVERT(NVARCHAR(150),@REFERENCE4),''); + PRINT 'REFERENCE5: ' + ISNULL(CONVERT(NVARCHAR(150),@REFERENCE5),''); + + --=================================================-- Beginning safety check 1--=================================================-- + IF (SELECT count(*) + FROM [TBDEX_IN] WITH (SNAPSHOT) + WHERE [PROFILE_ID] = @PROFILE_ID AND [BATCH_ID] = @BATCH_ID + AND ISNULL([REFERENCE1],'') = ISNULL(@REFERENCE1,'') AND ISNULL([REFERENCE2],'') = ISNULL(@REFERENCE2,'') + AND ISNULL([REFERENCE3],'') = ISNULL(@REFERENCE3,'') AND ISNULL([REFERENCE4],'') = ISNULL(@REFERENCE4,'') + AND ISNULL([REFERENCE5],'') = ISNULL(@REFERENCE5,'') AND [ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME) + ) <> 0 BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File is already in query ([TBDEX_IN])!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + IF (SELECT count(*) + FROM [TBDEX_TMP_PROCESS] WITH (SNAPSHOT) + WHERE [PROFILE_ID]=@PROFILE_ID AND [BATCH_ID]=@BATCH_ID AND [ADDED_WHO] in (@BATCH_CREATOR,@MY_PROCEDURE_NAME) + ) <> 0 BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File is already in query ([TBDEX_TMP_PROCESS])!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + -- if there is file wasnt already processes and exported + IF (SELECT count(*) + FROM [VWDEX_OUT] + WHERE [PROFILE_ID]=@PROFILE_ID AND ISNULL([REFERENCE1],'')=ISNULL(@REFERENCE1,'') AND ISNULL([REFERENCE2],'')=ISNULL(@REFERENCE2,'') AND ISNULL([REFERENCE3],'')=ISNULL(@REFERENCE3,'') AND ISNULL([REFERENCE4],'')=ISNULL(@REFERENCE4,'') AND ISNULL([REFERENCE5],'')=ISNULL(@REFERENCE5,'') + AND ISNULL([EXTERNAL_REFERENCE1],'')=ISNULL(@EXTERNAL_REFERENCE1,'') AND ISNULL([EXTERNAL_REFERENCE2],'')=ISNULL(@EXTERNAL_REFERENCE2,'') AND ISNULL([EXTERNAL_REFERENCE3],'')=ISNULL(@EXTERNAL_REFERENCE3,'') AND ISNULL([EXTERNAL_REFERENCE4],'')=ISNULL(@EXTERNAL_REFERENCE4,'') AND ISNULL([EXTERNAL_REFERENCE5],'')=ISNULL(@EXTERNAL_REFERENCE5,'') + ) = 0 BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Inserting into table: [TBDEX_IN]...',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- run insert statement --===================================================-- + INSERT INTO [TBDEX_IN]([PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [TEST_MODE],[ASYNC_MODE],[COMMENT],[ADDED_WHO],[ADDED_WHEN]) + SELECT [PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [TEST_MODE],[ASYNC_MODE],[COMMENT],[ADDED_WHO],[ADDED_WHEN] + FROM @vTBDEX_IN + WHERE [PROFILE_ID] = @PROFILE_ID + AND [BATCH_ID] = @BATCH_ID + AND ISNULL([REFERENCE1],'') = ISNULL(@REFERENCE1,'') + AND ISNULL([REFERENCE2],'') = ISNULL(@REFERENCE2,'') + AND ISNULL([REFERENCE3],'') = ISNULL(@REFERENCE3,'') + AND ISNULL([REFERENCE4],'') = ISNULL(@REFERENCE4,'') + AND ISNULL([REFERENCE5],'') = ISNULL(@REFERENCE5,'') + AND ISNULL([EXTERNAL_REFERENCE1],'') = ISNULL(@EXTERNAL_REFERENCE1,'') + AND ISNULL([EXTERNAL_REFERENCE2],'') = ISNULL(@EXTERNAL_REFERENCE2,'') + AND ISNULL([EXTERNAL_REFERENCE3],'') = ISNULL(@EXTERNAL_REFERENCE3,'') + AND ISNULL([EXTERNAL_REFERENCE4],'') = ISNULL(@EXTERNAL_REFERENCE4,'') + AND ISNULL([EXTERNAL_REFERENCE5],'') = ISNULL(@EXTERNAL_REFERENCE5,'') + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Insert into [TBDEX_IN] done!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + IF (@FORCE = 0) BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File was already exported ([TBDEX_OUT]), deleting from current call!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File was already exported ([TBDEX_OUT]), forcing export again!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- run insert statement --===================================================-- + INSERT INTO [TBDEX_IN]([PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [TEST_MODE],[ASYNC_MODE],[COMMENT],[ADDED_WHO],[ADDED_WHEN]) + SELECT [PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [TEST_MODE],[ASYNC_MODE],concat('Forced export!;',ISNULL([COMMENT],'')),[ADDED_WHO],[ADDED_WHEN] + FROM @vTBDEX_IN + WHERE [PROFILE_ID] = @PROFILE_ID + AND [BATCH_ID] = @BATCH_ID + AND ISNULL([REFERENCE1],'') = ISNULL(@REFERENCE1,'') + AND ISNULL([REFERENCE2],'') = ISNULL(@REFERENCE2,'') + AND ISNULL([REFERENCE3],'') = ISNULL(@REFERENCE3,'') + AND ISNULL([REFERENCE4],'') = ISNULL(@REFERENCE4,'') + AND ISNULL([REFERENCE5],'') = ISNULL(@REFERENCE5,'') + AND ISNULL([EXTERNAL_REFERENCE1],'') = ISNULL(@EXTERNAL_REFERENCE1,'') + AND ISNULL([EXTERNAL_REFERENCE2],'') = ISNULL(@EXTERNAL_REFERENCE2,'') + AND ISNULL([EXTERNAL_REFERENCE3],'') = ISNULL(@EXTERNAL_REFERENCE3,'') + AND ISNULL([EXTERNAL_REFERENCE4],'') = ISNULL(@EXTERNAL_REFERENCE4,'') + AND ISNULL([EXTERNAL_REFERENCE5],'') = ISNULL(@EXTERNAL_REFERENCE5,'') + ----------------------------------------------------------------------------------------------------------------------------------- + END; + + END; + + END; + + END; -- End safety check 1 + ----------------------------------------------------------------------------------------------------------------------------------- + + + --=================================================-- Beginning safety check 2--=================================================-- + IF (SELECT count(*) + FROM [TBDEX_TMP_PROCESS_REFERENCES] WITH (SNAPSHOT) + WHERE [PROFILE_ID] = @PROFILE_ID AND [BATCH_ID] = @BATCH_ID + AND ISNULL([REFERENCE1],'') = ISNULL(@REFERENCE1,'') AND ISNULL([REFERENCE2],'') = ISNULL(@REFERENCE2,'') + AND ISNULL([REFERENCE3],'') = ISNULL(@REFERENCE3,'') AND ISNULL([REFERENCE4],'') = ISNULL(@REFERENCE4,'') + AND ISNULL([REFERENCE5],'') = ISNULL(@REFERENCE5,'') AND [ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME) + ) <> 0 BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File is already in query ([TBDEX_TMP_PROCESS_REFERENCES])!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + IF (SELECT count(*) FROM [TBDEX_TMP_PROCESS] WITH (SNAPSHOT) WHERE [PROFILE_ID]=@PROFILE_ID AND [BATCH_ID]=@BATCH_ID AND [ADDED_WHO]=@MY_PROCEDURE_NAME) <> 0 BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File is already in query ([TBDEX_TMP_PROCESS])!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + -- if there is file wasnt already processes and exported + IF (SELECT count(*) + FROM [VWDEX_OUT] + WHERE [PROFILE_ID]=@PROFILE_ID AND ISNULL([REFERENCE1],'')=ISNULL(@REFERENCE1,'') AND ISNULL([REFERENCE2],'')=ISNULL(@REFERENCE2,'') AND ISNULL([REFERENCE3],'')=ISNULL(@REFERENCE3,'') AND ISNULL([REFERENCE4],'')=ISNULL(@REFERENCE4,'') AND ISNULL([REFERENCE5],'')=ISNULL(@REFERENCE5,'') + AND ISNULL([EXTERNAL_REFERENCE1],'')=ISNULL(@EXTERNAL_REFERENCE1,'') AND ISNULL([EXTERNAL_REFERENCE2],'')=ISNULL(@EXTERNAL_REFERENCE2,'') AND ISNULL([EXTERNAL_REFERENCE3],'')=ISNULL(@EXTERNAL_REFERENCE3,'') AND ISNULL([EXTERNAL_REFERENCE4],'')=ISNULL(@EXTERNAL_REFERENCE4,'') AND ISNULL([EXTERNAL_REFERENCE5],'')=ISNULL(@EXTERNAL_REFERENCE5,'') + ) = 0 BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Inserting into table: [TBDEX_TMP_PROCESS_REFERENCES]...',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- run insert statement --===================================================-- + INSERT INTO [TBDEX_TMP_PROCESS_REFERENCES]([PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [COMMENT],[ADDED_WHO],[ADDED_WHEN]) + SELECT [PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [COMMENT],[ADDED_WHO],[ADDED_WHEN] + FROM @vTBDEX_IN + WHERE [PROFILE_ID] = @PROFILE_ID + AND [BATCH_ID] = @BATCH_ID + AND ISNULL([REFERENCE1],'') = ISNULL(@REFERENCE1,'') + AND ISNULL([REFERENCE2],'') = ISNULL(@REFERENCE2,'') + AND ISNULL([REFERENCE3],'') = ISNULL(@REFERENCE3,'') + AND ISNULL([REFERENCE4],'') = ISNULL(@REFERENCE4,'') + AND ISNULL([REFERENCE5],'') = ISNULL(@REFERENCE5,'') + AND ISNULL([EXTERNAL_REFERENCE1],'') = ISNULL(@EXTERNAL_REFERENCE1,'') + AND ISNULL([EXTERNAL_REFERENCE2],'') = ISNULL(@EXTERNAL_REFERENCE2,'') + AND ISNULL([EXTERNAL_REFERENCE3],'') = ISNULL(@EXTERNAL_REFERENCE3,'') + AND ISNULL([EXTERNAL_REFERENCE4],'') = ISNULL(@EXTERNAL_REFERENCE4,'') + AND ISNULL([EXTERNAL_REFERENCE5],'') = ISNULL(@EXTERNAL_REFERENCE5,'') + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Insert into [TBDEX_TMP_PROCESS_REFERENCES] done!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + IF (@FORCE = 0) BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File was already exported ([TBDEX_OUT]), deleting from current call!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('File was already exported ([TBDEX_OUT]), forcing export again!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- run insert statement --===================================================-- + INSERT INTO [TBDEX_TMP_PROCESS_REFERENCES]([PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + [COMMENT],[ADDED_WHO],[ADDED_WHEN]) + SELECT [PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5], + [EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5], + concat('Forced export!;',ISNULL([COMMENT],'')),[ADDED_WHO],[ADDED_WHEN] + FROM @vTBDEX_IN + WHERE [PROFILE_ID] = @PROFILE_ID + AND [BATCH_ID] = @BATCH_ID + AND ISNULL([REFERENCE1],'') = ISNULL(@REFERENCE1,'') + AND ISNULL([REFERENCE2],'') = ISNULL(@REFERENCE2,'') + AND ISNULL([REFERENCE3],'') = ISNULL(@REFERENCE3,'') + AND ISNULL([REFERENCE4],'') = ISNULL(@REFERENCE4,'') + AND ISNULL([REFERENCE5],'') = ISNULL(@REFERENCE5,'') + AND ISNULL([EXTERNAL_REFERENCE1],'') = ISNULL(@EXTERNAL_REFERENCE1,'') + AND ISNULL([EXTERNAL_REFERENCE2],'') = ISNULL(@EXTERNAL_REFERENCE2,'') + AND ISNULL([EXTERNAL_REFERENCE3],'') = ISNULL(@EXTERNAL_REFERENCE3,'') + AND ISNULL([EXTERNAL_REFERENCE4],'') = ISNULL(@EXTERNAL_REFERENCE4,'') + AND ISNULL([EXTERNAL_REFERENCE5],'') = ISNULL(@EXTERNAL_REFERENCE5,'') + ----------------------------------------------------------------------------------------------------------------------------------- + END; + + END; + + END; + + END; -- End safety check 2 + ----------------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM CURSOR_INPUT INTO @REFERENCE1,@REFERENCE2,@REFERENCE3,@REFERENCE4,@REFERENCE5,@EXTERNAL_REFERENCE1,@EXTERNAL_REFERENCE2,@EXTERNAL_REFERENCE3,@EXTERNAL_REFERENCE4,@EXTERNAL_REFERENCE5; + END + CLOSE CURSOR_INPUT; + DEALLOCATE CURSOR_INPUT; + + + --===============================================-- Prepare dynamic export table --==============================================-- + SET @TBDEX_TMP_TABLE_SCHEMA_AND_NAME = CASE + WHEN (LEN(LTRIM(RTRIM(@TBDEX_TMP_TABLE_SCHEMA))) > 0) AND (LEFT(@TBDEX_TMP_TABLE_NAME,1) <> '#') + THEN QUOTENAME(@TBDEX_TMP_TABLE_SCHEMA) + '.' + QUOTENAME(@TBDEX_TMP_TABLE_NAME) + ELSE @TBDEX_TMP_TABLE_NAME + END; + + SET @TBDEX_TMP_TABLE_DROP_QUERY = 'SET ANSI_NULLS ON; + SET QUOTED_IDENTIFIER ON; + IF OBJECT_ID(''' + 'tempdb..' + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME + ''',''U'') IS NOT NULL + DROP TABLE ' + 'tempdb..' + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME + ';' + + SET @TBDEX_TMP_TABLE_COLUMNS = (SELECT STUFF((SELECT CONCAT(', ',QUOTENAME(REPLACE(REPLACE(ISNULL([COS].[PATH_OR_COLUMN],''),',','_'),'-','_')),' ') + FROM [TBDEX_CFG_OUT_STRUCTURE] AS [COS] + WHERE [COS].[ACTIVE] = @ACTIVE_FLAG AND [COS].[EXPORT_TYPE] = @EXPORT_TYPE AND [COS].[PROFILE_ID] = @PROFILE_ID + AND [COS].[LANGUAGE] in (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-')) + ORDER BY [COS].[SEQUENCE] ASC + FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,2,'')); + + SET @TBDEX_TMP_TABLE_COLUMNS = REPLACE(concat( + '[PROFILE_ID], ', + '[BATCH_ID], ', + @TBDEX_TMP_TABLE_COLUMNS),',,',','); + + SET @TBDEX_TMP_TABLE_CREATE_QUERY = (SELECT STUFF((SELECT CONCAT(', ',QUOTENAME(REPLACE(REPLACE(ISNULL([COS].[PATH_OR_COLUMN],''),',','_'),'-','_')),' ', + LTRIM(RTRIM(ISNULL([COS].[DATA_TYPE],'NVARCHAR(100)')))) + FROM [TBDEX_CFG_OUT_STRUCTURE] AS [COS] + WHERE [COS].[ACTIVE] = @ACTIVE_FLAG AND [COS].[EXPORT_TYPE] = @EXPORT_TYPE AND [COS].[PROFILE_ID] = @PROFILE_ID + AND [COS].[LANGUAGE] in (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-')) + ORDER BY [COS].[SEQUENCE] ASC + FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,2,'')); + + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(concat( + '[GUID] [bigint] IDENTITY(1,1) NOT NULL, ', + '[PROFILE_ID] [bigint] NOT NULL, ', + '[BATCH_ID] [nvarchar](25) NOT NULL, ', + @TBDEX_TMP_TABLE_CREATE_QUERY),',,',','); + --MEMORY_OPTIMIZED dont work if data comes from a other db + --SET @TBDEX_TMP_TABLE_CREATE_QUERY = 'SET ANSI_NULLS ON; + -- SET QUOTED_IDENTIFIER ON; + -- CREATE TABLE ' + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME + ' + -- (' + @TBDEX_TMP_TABLE_CREATE_QUERY + ', + -- CONSTRAINT [PK_'+ @TBDEX_TMP_TABLE_NAME +'] PRIMARY KEY NONCLUSTERED + -- ([GUID] ASC) + -- ) WITH ( MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY );'; + + SET @TBDEX_TMP_TABLE_CREATE_QUERY = 'SET ANSI_NULLS ON; + SET QUOTED_IDENTIFIER ON; + CREATE TABLE ' + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME + ' + (' + @TBDEX_TMP_TABLE_CREATE_QUERY + ');'; + + SET @TBDEX_TMP_TABLE_DROP_QUERY = REPLACE(@TBDEX_TMP_TABLE_DROP_QUERY,', ,',','); + SET @TBDEX_TMP_TABLE_COLUMNS = REPLACE(@TBDEX_TMP_TABLE_COLUMNS,', ,',','); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,', ,',','); + ----------------------------------------------------------------------------------------------------------------------------------- + + + --==================================================-- Handle placeholders --==================================================-- + PRINT ''; + PRINT 'Replacing placeholders...'; + + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%PROFILE_ID%',ISNULL(@PROFILE_ID,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%TEST_MODE%',ISNULL(@TEST_MODE,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%ASYNC_MODE%',ISNULL(@ASYNC_MODE,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%BATCH_ID%',ISNULL(@BATCH_ID,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%BATCH_CREATOR%',ISNULL(@BATCH_CREATOR,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%LANGUAGE%',ISNULL(@LANGUAGE,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%LOG_LEVEL%',ISNULL(@LOG_LEVEL,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%START_QUERY%',ISNULL(@START_QUERY,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%START_QUERY_VAR1%',ISNULL(@START_QUERY_VAR1,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%START_QUERY_VAR2%',ISNULL(@START_QUERY_VAR2,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%START_QUERY_VAR3%',ISNULL(@START_QUERY_VAR3,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%START_QUERY_VAR4%',ISNULL(@START_QUERY_VAR4,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%START_QUERY_VAR5%',ISNULL(@START_QUERY_VAR5,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%FORCE%',ISNULL(@FORCE,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%MY_PROCEDURE_NAME%',ISNULL(@MY_PROCEDURE_NAME,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%PROFILE_NAME%',ISNULL(@PROFILE_NAME,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%MANDANTOR%',ISNULL(@MANDANTOR,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%EXPORT_TYPE%',ISNULL(@EXPORT_TYPE,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%REFERENCE1%',ISNULL(@REFERENCE1,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%REFERENCE2%',ISNULL(@REFERENCE2,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%REFERENCE3%',ISNULL(@REFERENCE3,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%REFERENCE4%',ISNULL(@REFERENCE4,'')); + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,'%REFERENCE5%',ISNULL(@REFERENCE5,'')); + + DECLARE CURSOR_PLACEHOLDER CURSOR + LOCAL FAST_FORWARD FOR + SELECT [PLACEHOLDER_NAME] as 'Placeholder_Name', [PLACEHOLDER] as 'Placeholder' + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @PLACEHOLDER_TYPE + ORDER BY [SEQUENCE] ASC; + + OPEN CURSOR_PLACEHOLDER + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @TBDEX_TMP_TABLE_CREATE_QUERY = REPLACE(@TBDEX_TMP_TABLE_CREATE_QUERY,concat('%',@PLACEHOLDER_NAME,'%'),ISNULL(@PLACEHOLDER,'')); + + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + END + CLOSE CURSOR_PLACEHOLDER; + DEALLOCATE CURSOR_PLACEHOLDER; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('The complete "@TBDEX_TMP_TABLE_CREATE_QUERY" query: ',char(13),@TBDEX_TMP_TABLE_CREATE_QUERY); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --===================================================-- Update process table --==================================================-- + UPDATE [TBDEX_TMP_PROCESS] + SET [TBDEX_TMP_TABLE_SCHEMA] = @TBDEX_TMP_TABLE_SCHEMA, + [TBDEX_TMP_TABLE_NAME] = @TBDEX_TMP_TABLE_NAME, + [TBDEX_TMP_TABLE_SCHEMA_AND_NAME] = @TBDEX_TMP_TABLE_SCHEMA_AND_NAME, + [TBDEX_TMP_TABLE_COLUMNS] = @TBDEX_TMP_TABLE_COLUMNS, + [TBDEX_TMP_TABLE_DROP_QUERY] = @TBDEX_TMP_TABLE_DROP_QUERY, + [TBDEX_TMP_TABLE_CREATE_QUERY] = @TBDEX_TMP_TABLE_CREATE_QUERY, + [CHANGED_WHO] = @BATCH_CREATOR, + [CHANGED_WHEN] = GetDate() + WHERE [PROFILE_ID] = @PROFILE_ID + AND [BATCH_ID] = @BATCH_ID + AND [ADDED_WHO] = @BATCH_CREATOR + ----------------------------------------------------------------------------------------------------------------------------------- + + + --===================================================-- COMMIT TRANSACTION --====================================================-- + IF (@@TRANCOUNT > 0) BEGIN + COMMIT TRANSACTION; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --======================================================-- Cleaning up --======================================================-- + IF (@TEST_MODE = 1) BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Showing content of table [TBDEX_IN] before cleanup',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --=====================================================-- Showing result --======================================================-- + SELECT [GUID], + [PROFILE_ID], + [BATCH_ID], + [REFERENCE1], + [REFERENCE2], + [REFERENCE3], + [REFERENCE4], + [REFERENCE5], + [EXTERNAL_REFERENCE1], + [EXTERNAL_REFERENCE2], + [EXTERNAL_REFERENCE3], + [EXTERNAL_REFERENCE4], + [EXTERNAL_REFERENCE5], + [TEST_MODE], + [ASYNC_MODE], + [COMMENT], + [ADDED_WHO], + [ADDED_WHEN] + FROM [TBDEX_IN] WITH (SNAPSHOT)-- In test mode show result AND DO NOT use dirty reads. + WHERE [PROFILE_ID] = @PROFILE_ID AND [BATCH_ID] = @BATCH_ID AND [TEST_MODE] = @TEST_MODE + AND [ASYNC_MODE] = @ASYNC_MODE AND [ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME); + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Cleaning up Query table because of TEST_MODE is enabled!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --=======================================================-- Cleaning up --=======================================================-- + DELETE FROM [TBDEX_IN] + WHERE [PROFILE_ID] = @PROFILE_ID AND [BATCH_ID] = @BATCH_ID AND [TEST_MODE] = @TEST_MODE + AND [ASYNC_MODE] = @ASYNC_MODE AND [ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME); + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Dont cleaning up Query table because of TEST_MODE is disabled!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'WARN', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT char(13) + @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END TRY BEGIN CATCH + + --====================================================-- exception / error --====================================================-- + IF (@@TRANCOUNT > 0) BEGIN + ROLLBACK TRANSACTION; + END; + + PRINT char(13) + 'ERROR: ' + @RETURN_STATUS_TEXT + '; ' + @RETURN_ERROR_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = CASE WHEN @RETURN_STATUS > 50000 THEN @RETURN_STATUS ELSE 50000 END; + SET @RETURN_STATUS_TEXT = concat(char(13),'END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE())); + + PRINT 'ERROR IN PROCEDURE: [' + @MY_PROCEDURE_NAME + ']' + char(13) + @RETURN_ERROR_TEXT; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END CATCH; +GO \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_GET_INPUT_CONTENT].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_GET_INPUT_CONTENT].sql new file mode 100644 index 0000000..78e8556 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_GET_INPUT_CONTENT].sql @@ -0,0 +1,593 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDEX_GET_INPUT_CONTENT] +-- ================================================================= +-- Sucht alle noch nicht exportierten Dokumente bzw. Daten zusammen +-- +-- Returns: INTEGER; 0 = ok; 0 <> nicht ok +-- ================================================================= +-- Copyright (c) 2025 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: 01.08.2025 / MK +-- Version Date / Editor: 01.08.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 01.08.2025 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_GET_INPUT_CONTENT]( + @pPROFILE_ID BIGINT, + @pTEST_MODE BIT, + @pASYNC_MODE BIT, + @pBATCH_ID NVARCHAR(25), + @pBATCH_CREATOR NVARCHAR(50), + @pLANGUAGE NVARCHAR(10), + @pLOG_LEVEL NVARCHAR(25), + @pSTART_QUERY NVARCHAR(MAX), + @pSTART_QUERY_VAR1 NVARCHAR(50), + @pSTART_QUERY_VAR2 NVARCHAR(50), + @pSTART_QUERY_VAR3 NVARCHAR(50), + @pSTART_QUERY_VAR4 NVARCHAR(50), + @pSTART_QUERY_VAR5 NVARCHAR(50), + @pMAIN_QUERY NVARCHAR(MAX), + @pMAIN_QUERY_VAR1 NVARCHAR(50), + @pMAIN_QUERY_VAR2 NVARCHAR(50), + @pMAIN_QUERY_VAR3 NVARCHAR(50), + @pMAIN_QUERY_VAR4 NVARCHAR(50), + @pMAIN_QUERY_VAR5 NVARCHAR(50), + @pEND_QUERY NVARCHAR(MAX), + @pEND_QUERY_VAR1 NVARCHAR(50), + @pEND_QUERY_VAR2 NVARCHAR(50), + @pEND_QUERY_VAR3 NVARCHAR(50), + @pEND_QUERY_VAR4 NVARCHAR(50), + @pEND_QUERY_VAR5 NVARCHAR(50), + @pFORCE BIT, + @pPROFILE_NAME NVARCHAR(50), + @pMANDANTOR NVARCHAR(50), + @pEXPORT_TYPE NVARCHAR(50), + @pEXPORT_NUMBER_SCHEMA NVARCHAR(25), + @pDEFAULT_DATA_SEPARATOR NVARCHAR(10), + @pTBDEX_TMP_TABLE_SCHEMA SYSNAME, + @pTBDEX_TMP_TABLE_NAME SYSNAME, + @pTBDEX_TMP_TABLE_SCHEMA_AND_NAME NVARCHAR(150), + @pTBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_DROP_QUERY NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_CREATE_QUERY NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_INSERT_QUERY NVARCHAR(MAX), + @pREFERENCE1 NVARCHAR(150), + @pREFERENCE2 NVARCHAR(150), + @pREFERENCE3 NVARCHAR(150), + @pREFERENCE4 NVARCHAR(150), + @pREFERENCE5 NVARCHAR(150), + @pEXTERNAL_REFERENCE1 NVARCHAR(250), + @pEXTERNAL_REFERENCE2 NVARCHAR(250), + @pEXTERNAL_REFERENCE3 NVARCHAR(250), + @pEXTERNAL_REFERENCE4 NVARCHAR(250), + @pEXTERNAL_REFERENCE5 NVARCHAR(250) +) +AS +BEGIN TRY + + SET NOCOUNT ON; + + -- declare new vars because of parameter sniffing + DECLARE @PROFILE_ID BIGINT = @pPROFILE_ID, + @TEST_MODE BIT = @pTEST_MODE, + @ASYNC_MODE BIT = @pASYNC_MODE, + @BATCH_ID NVARCHAR(25) = @pBATCH_ID, + @BATCH_CREATOR NVARCHAR(128) = ISNULL(@pBATCH_CREATOR,OBJECT_NAME(@@PROCID)), + @LANGUAGE NVARCHAR(10) = @pLANGUAGE, + @LOG_LEVEL NVARCHAR(25) = UPPER(ISNULL(@pLOG_LEVEL,'INFO')), + @START_QUERY NVARCHAR(500) = @pSTART_QUERY, + @START_QUERY_VAR1 NVARCHAR(50) = @pSTART_QUERY_VAR1, + @START_QUERY_VAR2 NVARCHAR(50) = @pSTART_QUERY_VAR2, + @START_QUERY_VAR3 NVARCHAR(50) = @pSTART_QUERY_VAR3, + @START_QUERY_VAR4 NVARCHAR(50) = @pSTART_QUERY_VAR4, + @START_QUERY_VAR5 NVARCHAR(50) = @pSTART_QUERY_VAR5, + @MAIN_QUERY NVARCHAR(500) = @pMAIN_QUERY, + @MAIN_QUERY_VAR1 NVARCHAR(50) = @pMAIN_QUERY_VAR1, + @MAIN_QUERY_VAR2 NVARCHAR(50) = @pMAIN_QUERY_VAR2, + @MAIN_QUERY_VAR3 NVARCHAR(50) = @pMAIN_QUERY_VAR3, + @MAIN_QUERY_VAR4 NVARCHAR(50) = @pMAIN_QUERY_VAR4, + @MAIN_QUERY_VAR5 NVARCHAR(50) = @pMAIN_QUERY_VAR5, + @END_QUERY NVARCHAR(500) = @pEND_QUERY, + @END_QUERY_VAR1 NVARCHAR(50) = @pEND_QUERY_VAR1, + @END_QUERY_VAR2 NVARCHAR(50) = @pEND_QUERY_VAR2, + @END_QUERY_VAR3 NVARCHAR(50) = @pEND_QUERY_VAR3, + @END_QUERY_VAR4 NVARCHAR(50) = @pEND_QUERY_VAR4, + @END_QUERY_VAR5 NVARCHAR(50) = @pEND_QUERY_VAR5, + @FORCE BIT = @pFORCE, + @PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME, + @MANDANTOR NVARCHAR(50) = @pMANDANTOR, + @EXPORT_TYPE NVARCHAR(50) = @pEXPORT_TYPE, + @EXPORT_NUMBER_SCHEMA NVARCHAR(25) = @pEXPORT_NUMBER_SCHEMA, + @DEFAULT_DATA_SEPARATOR NVARCHAR(10) = @pDEFAULT_DATA_SEPARATOR, + @TBDEX_TMP_TABLE_SCHEMA SYSNAME = @pTBDEX_TMP_TABLE_SCHEMA, + @TBDEX_TMP_TABLE_NAME SYSNAME = @pTBDEX_TMP_TABLE_NAME, + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME NVARCHAR(150) = @pTBDEX_TMP_TABLE_SCHEMA_AND_NAME, + @TBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_COLUMNS, + @TBDEX_TMP_TABLE_DROP_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_DROP_QUERY, + @TBDEX_TMP_TABLE_CREATE_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_CREATE_QUERY, + @TBDEX_TMP_TABLE_INSERT_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_INSERT_QUERY, + @REFERENCE1 NVARCHAR(150) = @pREFERENCE1, + @REFERENCE2 NVARCHAR(150) = @pREFERENCE2, + @REFERENCE3 NVARCHAR(150) = @pREFERENCE3, + @REFERENCE4 NVARCHAR(150) = @pREFERENCE4, + @REFERENCE5 NVARCHAR(150) = @pREFERENCE5, + @EXTERNAL_REFERENCE1 NVARCHAR(250) = @pEXTERNAL_REFERENCE1, + @EXTERNAL_REFERENCE2 NVARCHAR(250) = @pEXTERNAL_REFERENCE2, + @EXTERNAL_REFERENCE3 NVARCHAR(250) = @pEXTERNAL_REFERENCE3, + @EXTERNAL_REFERENCE4 NVARCHAR(250) = @pEXTERNAL_REFERENCE4, + @EXTERNAL_REFERENCE5 NVARCHAR(250) = @pEXTERNAL_REFERENCE5; + + -- declare runtime vars + DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ACTIVE_FLAG BIT = 1, + @INACTIVE_FLAG BIT = 0, + @ROW_COUNT0 SMALLINT = 0, + @ROW_COUNT1 SMALLINT = 0, + @ROW_COUNT2 SMALLINT = 0, + @ROW_COUNTER1 SMALLINT = 0, + @ROW_COUNTER2 SMALLINT = 0, + @ROW_COUNT_SUM1 SMALLINT = 0, + @PLACEHOLDER_NAME NVARCHAR(50) = NULL, + @PLACEHOLDER NVARCHAR(MAX) = NULL, + @PLACEHOLDER_TYPE NVARCHAR(10) = 'CONST', + @TBDEX_IN_GUID BIGINT = 0, + @TBDEX_IN_PROFILE_ID SMALLINT = 0, + @TBDEX_IN_BATCH_ID NVARCHAR(25) = NULL, + @TBDEX_IN_REFERENCE1 NVARCHAR(150) = NULL, + @TBDEX_IN_REFERENCE2 NVARCHAR(150) = NULL, + @TBDEX_IN_REFERENCE3 NVARCHAR(150) = NULL, + @TBDEX_IN_REFERENCE4 NVARCHAR(150) = NULL, + @TBDEX_IN_REFERENCE5 NVARCHAR(150) = NULL, + @TBDEX_IN_EXTERNAL_REFERENCE1 NVARCHAR(250) = NULL, + @TBDEX_IN_EXTERNAL_REFERENCE2 NVARCHAR(250) = NULL, + @TBDEX_IN_EXTERNAL_REFERENCE3 NVARCHAR(250) = NULL, + @TBDEX_IN_EXTERNAL_REFERENCE4 NVARCHAR(250) = NULL, + @TBDEX_IN_EXTERNAL_REFERENCE5 NVARCHAR(250) = NULL, + @TBDEX_IN_TEST_MODE BIT = 0, + @TBDEX_IN_ASYNC_MODE BIT = 0, + @TBDEX_IN_COMMENT NVARCHAR(150) = NULL, + @TBDEX_IN_ADDED_WHO NVARCHAR(50) = NULL, + @TBDEX_IN_ADDED_WHEN DATETIME = NULL, + @TBDEX_TMP_QUERY_GUID BIGINT = 0, + @TBDEX_TMP_QUERY_PROFILE_ID SMALLINT = 0, + @TBDEX_TMP_QUERY_BATCH_ID NVARCHAR(25) = NULL, + @TBDEX_TMP_QUERY_QUERY NVARCHAR(MAX) = NULL, + @TBDEX_TMP_QUERY_COMMENT NVARCHAR(150) = NULL, + @TBDEX_TMP_QUERY_ADDED_WHO NVARCHAR(50) = NULL, + @TBDEX_TMP_QUERY_ADDED_WHEN DATETIME = NULL, + @RETURN_STATUS INT = 0, + @RETURN_STATUS_TEXT NVARCHAR(MAX) = concat('START PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(varchar(50),GETDATE(),120)), + @RETURN_ERROR_TEXT NVARCHAR(MAX) = ''; + + PRINT '===================================================================================================='; + PRINT @RETURN_STATUS_TEXT; + PRINT ''; + PRINT 'PARAMETER01 - @PROFILE_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_ID,'')); + PRINT 'PARAMETER02 - @TEST_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@TEST_MODE,'')); + PRINT 'PARAMETER03 - @ASYNC_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@ASYNC_MODE,'')); + PRINT 'PARAMETER04 - @BATCH_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_ID,'')); + PRINT 'PARAMETER05 - @BATCH_CREATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_CREATOR,'')); + PRINT 'PARAMETER06 - @LANGUAGE: ' + CONVERT(NVARCHAR(50),ISNULL(@LANGUAGE,'')); + PRINT 'PARAMETER07 - @LOG_LEVEL: ' + CONVERT(NVARCHAR(50),ISNULL(@LOG_LEVEL,'')); + PRINT 'PARAMETER08 - @START_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY,'')); + PRINT 'PARAMETER09 - @START_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR1,'')); + PRINT 'PARAMETER10 - @START_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR2,'')); + PRINT 'PARAMETER11 - @START_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR3,'')); + PRINT 'PARAMETER12 - @START_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR4,'')); + PRINT 'PARAMETER13 - @START_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR5,'')); + PRINT 'PARAMETER14 - @MAIN_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY,'')); + PRINT 'PARAMETER15 - @MAIN_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR1,'')); + PRINT 'PARAMETER16 - @MAIN_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR2,'')); + PRINT 'PARAMETER17 - @MAIN_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR3,'')); + PRINT 'PARAMETER18 - @MAIN_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR4,'')); + PRINT 'PARAMETER19 - @MAIN_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR5,'')); + PRINT 'PARAMETER20 - @END_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY,'')); + PRINT 'PARAMETER21 - @END_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR1,'')); + PRINT 'PARAMETER22 - @END_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR2,'')); + PRINT 'PARAMETER23 - @END_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR3,'')); + PRINT 'PARAMETER24 - @END_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR4,'')); + PRINT 'PARAMETER25 - @END_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR5,'')); + PRINT 'PARAMETER26 - @FORCE: ' + CONVERT(NVARCHAR(50),ISNULL(@FORCE,'')); + PRINT 'PARAMETER27 - @PROFILE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_NAME,'')); + PRINT 'PARAMETER28 - @MANDANTOR: ' + CONVERT(NVARCHAR(50),ISNULL(@MANDANTOR,'')); + PRINT 'PARAMETER29 - @EXPORT_TYPE: ' + CONVERT(NVARCHAR(50),ISNULL(@EXPORT_TYPE,'')); + PRINT 'PARAMETER30 - @EXPORT_NUMBER_SCHEMA: ' + CONVERT(NVARCHAR(50),ISNULL(@EXPORT_NUMBER_SCHEMA,'')); + PRINT 'PARAMETER31 - @DEFAULT_DATA_SEPARATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@DEFAULT_DATA_SEPARATOR,'')); + PRINT 'PARAMETER32 - @REFERENCE1: ' + CONVERT(NVARCHAR(50),ISNULL(@REFERENCE1,'')); + PRINT 'PARAMETER33 - @REFERENCE2: ' + CONVERT(NVARCHAR(50),ISNULL(@REFERENCE2,'')); + PRINT 'PARAMETER34 - @REFERENCE3: ' + CONVERT(NVARCHAR(50),ISNULL(@REFERENCE3,'')); + PRINT 'PARAMETER35 - @REFERENCE4: ' + CONVERT(NVARCHAR(50),ISNULL(@REFERENCE4,'')); + PRINT 'PARAMETER36 - @REFERENCE5: ' + CONVERT(NVARCHAR(50),ISNULL(@REFERENCE5,'')); + PRINT ''; + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --==================================================-- Count main sql querys --==================================================-- + SET @ROW_COUNT1 = ISNULL((SELECT COUNT(*) FROM [TBDEX_TMP_PROCESS_REFERENCES] WITH (SNAPSHOT) + WHERE [PROFILE_ID]=@PROFILE_ID AND [BATCH_ID]=@BATCH_ID AND [ADDED_WHO]=@BATCH_CREATOR),0); + SET @ROW_COUNT2 = ISNULL((SELECT COUNT(*) FROM [TBDEX_TMP_QUERY] WITH (SNAPSHOT) + WHERE [GUID] > 0 AND [PROFILE_ID]=@PROFILE_ID AND [BATCH_ID]=@BATCH_ID AND [QUERY] IS NOT NULL AND [ADDED_WHO]=@BATCH_CREATOR),0); + SET @ROW_COUNT_SUM1 = (@ROW_COUNT1 + @ROW_COUNT2); + + IF (@ROW_COUNT_SUM1 < 2) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50007; + SET @RETURN_STATUS_TEXT = concat('',''); + SET @RETURN_ERROR_TEXT = concat('Insufficient rows in [TBDEX_TMP_PROCESS_REFERENCES] (COUNT: ',CONVERT(NVARCHAR(50),@ROW_COUNT1),') and/or [TBDEX_TMP_QUERY] (COUNT: ',CONVERT(NVARCHAR(50),@ROW_COUNT2),') found!'); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found the sum of: ',CONVERT(NVARCHAR(50),@ROW_COUNT_SUM1),' in the tables [TBDEX_TMP_PROCESS_REFERENCES] and [TBDEX_TMP_QUERY].'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + + --==================================================-- Handle placeholders --==================================================-- + DECLARE CURSOR_TBDEX_TMP_PROCESS_REFERENCES CURSOR + LOCAL FAST_FORWARD FOR + SELECT [GUID] as 'TBDEX_IN_GUID', [PROFILE_ID] as 'TBDEX_IN_PROFILE_ID', + [BATCH_ID] as 'TBDEX_IN_BATCH_ID', + [REFERENCE1] as 'TBDEX_IN_REFERENCE1', [REFERENCE2] as 'TBDEX_IN_REFERENCE2', + [REFERENCE3] as 'TBDEX_IN_REFERENCE3', [REFERENCE4] as 'TBDEX_IN_REFERENCE4', + [REFERENCE5] as 'TBDEX_IN_REFERENCE5', + [EXTERNAL_REFERENCE1] as 'TBDEX_IN_EXTERNAL_REFERENCE1', [EXTERNAL_REFERENCE2] as 'TBDEX_IN_EXTERNAL_REFERENCE2', + [EXTERNAL_REFERENCE3] as 'TBDEX_IN_EXTERNAL_REFERENCE3', [EXTERNAL_REFERENCE4] as 'TBDEX_IN_EXTERNAL_REFERENCE4', + [EXTERNAL_REFERENCE5] as 'TBDEX_IN_EXTERNAL_REFERENCE5', + --[TEST_MODE] as 'TBDEX_IN_TEST_MODE', [ASYNC_MODE] as 'TBDEX_IN_ASYNC_MODE', + [COMMENT] as 'TBDEX_IN_COMMENT', + [ADDED_WHO] as 'TBDEX_IN_ADDED_WHO', [ADDED_WHEN] as 'TBDEX_IN_ADDED_WHEN' + FROM [TBDEX_TMP_PROCESS_REFERENCES] WITH (SNAPSHOT) + WHERE [PROFILE_ID]=@PROFILE_ID AND [BATCH_ID]=@BATCH_ID AND [ADDED_WHO]=@BATCH_CREATOR + ORDER BY [GUID] ASC; + + OPEN CURSOR_TBDEX_TMP_PROCESS_REFERENCES + FETCH NEXT FROM CURSOR_TBDEX_TMP_PROCESS_REFERENCES INTO @TBDEX_IN_GUID,@TBDEX_IN_PROFILE_ID,@TBDEX_IN_BATCH_ID,@TBDEX_IN_REFERENCE1,@TBDEX_IN_REFERENCE2,@TBDEX_IN_REFERENCE3,@TBDEX_IN_REFERENCE4,@TBDEX_IN_REFERENCE5,@TBDEX_IN_EXTERNAL_REFERENCE1,@TBDEX_IN_EXTERNAL_REFERENCE2,@TBDEX_IN_EXTERNAL_REFERENCE3,@TBDEX_IN_EXTERNAL_REFERENCE4,@TBDEX_IN_EXTERNAL_REFERENCE5,@TBDEX_IN_COMMENT,@TBDEX_IN_ADDED_WHO,@TBDEX_IN_ADDED_WHEN; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @ROW_COUNTER1 += 1; -- Increase loop counter + IF ((@ROW_COUNTER1 = 1) OR (@ROW_COUNTER1 = @ROW_COUNT1) OR (@ROW_COUNTER1 % 100 = 0)) BEGIN + PRINT concat('This is cursor (CURSOR_TBDEX_TMP_PROCESS_REFERENCES), loop nr: ',@ROW_COUNTER1); + END; + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Proccessing table: [TBDEX_TMP_PROCESS_REFERENCES] - Row ',CONVERT(NVARCHAR(50),@ROW_COUNTER1),' of ',CONVERT(NVARCHAR(50),@ROW_COUNT1)); + SET @RETURN_ERROR_TEXT = concat('',''); + + IF ((@ROW_COUNTER1 = 1) OR (@ROW_COUNTER1 = @ROW_COUNT1) OR (@ROW_COUNTER1 % 100 = 0)) BEGIN + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- loop vars from row --====================================================-- + PRINT '[GUID]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_GUID,'')); + PRINT '[PROFILE_ID]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_PROFILE_ID,'')); + PRINT '[BATCH_ID]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_BATCH_ID,'')); + PRINT '[REFERENCE1]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_REFERENCE1,'')); + PRINT '[REFERENCE2]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_REFERENCE2,'')); + PRINT '[REFERENCE3]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_REFERENCE3,'')); + PRINT '[REFERENCE4]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_REFERENCE4,'')); + PRINT '[REFERENCE5]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_REFERENCE5,'')); + PRINT '[TEST_MODE]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_TEST_MODE,'')); + PRINT '[ASYNC_MODE]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_ASYNC_MODE,'')); + PRINT '[COMMENT]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_COMMENT,'')); + PRINT '[ADDED_WHO]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_ADDED_WHO,'')); + PRINT '[ADDED_WHEN]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_IN_ADDED_WHEN,'')); + ----------------------------------------------------------------------------------------------------------------------------------- + + SET @ROW_COUNTER2 = 0; + + DECLARE CURSOR_TBDEX_TMP_QUERY CURSOR + LOCAL FAST_FORWARD FOR + SELECT [GUID] as 'TBDEX_TMP_QUERY_GUID', [PROFILE_ID] as 'TBDEX_TMP_QUERY_PROFILE_ID', [BATCH_ID] as 'TBDEX_TMP_QUERY_BATCH_ID', + [QUERY] as 'TBDEX_TMP_QUERY_QUERY', [COMMENT] as 'TBDEX_TMP_QUERY_COMMENT', [ADDED_WHO] as 'TBDEX_TMP_QUERY_ADDED_WHO', + [ADDED_WHEN] as 'TBDEX_TMP_QUERY_ADDED_WHEN' + FROM [TBDEX_TMP_QUERY] WITH (SNAPSHOT) + WHERE [PROFILE_ID]=@PROFILE_ID AND [BATCH_ID]=@BATCH_ID + ORDER BY [GUID] ASC; + + OPEN CURSOR_TBDEX_TMP_QUERY + FETCH NEXT FROM CURSOR_TBDEX_TMP_QUERY INTO @TBDEX_TMP_QUERY_GUID,@TBDEX_TMP_QUERY_PROFILE_ID,@TBDEX_TMP_QUERY_BATCH_ID,@TBDEX_TMP_QUERY_QUERY,@TBDEX_TMP_QUERY_COMMENT,@TBDEX_TMP_QUERY_ADDED_WHO,@TBDEX_TMP_QUERY_ADDED_WHEN; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @ROW_COUNTER2 += 1; -- Increase loop counter + IF ((@ROW_COUNTER2 = 1) OR (@ROW_COUNTER2 = @ROW_COUNT2) OR (@ROW_COUNTER2 % 100 = 0)) BEGIN + PRINT concat('This is cursor (CURSOR_TBDEX_TMP_QUERY), loop nr: ',@ROW_COUNTER2); + END; + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Proccessing table: [TBDEX_TMP_QUERY] - Row ',CONVERT(NVARCHAR(50),@ROW_COUNTER2),' of ',CONVERT(NVARCHAR(50),@ROW_COUNT2)); + SET @RETURN_ERROR_TEXT = concat('',''); + + IF ((@ROW_COUNTER2 = 1) OR (@ROW_COUNTER2 = @ROW_COUNT2) OR (@ROW_COUNTER2 % 100 = 0)) BEGIN + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- loop vars from row --====================================================-- + PRINT '[GUID]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_QUERY_GUID,'')); + PRINT '[PROFILE_ID]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_QUERY_PROFILE_ID,'')); + PRINT '[BATCH_ID]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_QUERY_BATCH_ID,'')); + PRINT '[QUERY]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_QUERY_QUERY,'')); + PRINT '[COMMENT]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_QUERY_COMMENT,'')); + PRINT '[ADDED_WHO]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_QUERY_ADDED_WHO,'')); + PRINT '[ADDED_WHEN]: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_QUERY_ADDED_WHEN,'')); + ----------------------------------------------------------------------------------------------------------------------------------- + + + --==================================================-- Handle placeholders --==================================================-- + PRINT ''; + PRINT 'Replacing placeholders in query...'; + + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%PROFILE_ID%',ISNULL(@PROFILE_ID,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%TEST_MODE%',ISNULL(@TEST_MODE,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%ASYNC_MODE%',ISNULL(@ASYNC_MODE,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%BATCH_ID%',ISNULL(@BATCH_ID,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%BATCH_CREATOR%',ISNULL(@BATCH_CREATOR,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%LANGUAGE%',ISNULL(@LANGUAGE,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%LOG_LEVEL%',ISNULL(@LOG_LEVEL,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%START_QUERY%',ISNULL(@START_QUERY,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%START_QUERY_VAR1%',ISNULL(@START_QUERY_VAR1,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%START_QUERY_VAR2%',ISNULL(@START_QUERY_VAR2,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%START_QUERY_VAR3%',ISNULL(@START_QUERY_VAR3,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%START_QUERY_VAR4%',ISNULL(@START_QUERY_VAR4,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%START_QUERY_VAR5%',ISNULL(@START_QUERY_VAR5,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%FORCE%',ISNULL(@FORCE,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%MY_PROCEDURE_NAME%',ISNULL(@MY_PROCEDURE_NAME,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%PROFILE_NAME%',ISNULL(@PROFILE_NAME,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%MANDANTOR%',ISNULL(@MANDANTOR,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%EXPORT_TYPE%',ISNULL(@EXPORT_TYPE,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%REFERENCE1%',ISNULL(@TBDEX_IN_REFERENCE1,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%REFERENCE2%',ISNULL(@TBDEX_IN_REFERENCE2,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%REFERENCE3%',ISNULL(@TBDEX_IN_REFERENCE3,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%REFERENCE4%',ISNULL(@TBDEX_IN_REFERENCE4,'')); + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,'%REFERENCE5%',ISNULL(@TBDEX_IN_REFERENCE5,'')); + + DECLARE CURSOR_PLACEHOLDER CURSOR + LOCAL FAST_FORWARD FOR + SELECT [PLACEHOLDER_NAME] as 'Placeholder_Name', [PLACEHOLDER] as 'Placeholder' + FROM [TBDEX_CFG_RESOURCES] (NOLOCK) + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @PLACEHOLDER_TYPE + ORDER BY [SEQUENCE] ASC; + + OPEN CURSOR_PLACEHOLDER + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @TBDEX_TMP_QUERY_QUERY = REPLACE(@TBDEX_TMP_QUERY_QUERY,concat('%',@PLACEHOLDER_NAME,'%'),ISNULL(@PLACEHOLDER,'')); + + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + END + CLOSE CURSOR_PLACEHOLDER; + DEALLOCATE CURSOR_PLACEHOLDER; + ----------------------------------------------------------------------------------------------------------------------------------- + + --=================================================-- Check first sql query --===================================================-- + IF (LEN(@TBDEX_TMP_QUERY_QUERY) < 15) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50001; + SET @RETURN_STATUS_TEXT = concat('Wrong call or configuraton!',''); + SET @RETURN_ERROR_TEXT = concat('Found no valid querys (query needs to be 15 chars or more)!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found valid "@TBDEX_TMP_QUERY_QUERY" query: ',char(13),@TBDEX_TMP_QUERY_QUERY); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --=================================================-- build insert statement --==================================================-- + SET @TBDEX_TMP_QUERY_QUERY = CONCAT(char(13),'INSERT INTO ',@TBDEX_TMP_TABLE_SCHEMA_AND_NAME, + '(',@pTBDEX_TMP_TABLE_COLUMNS,')',char(13), + @TBDEX_TMP_QUERY_QUERY); + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('The complete "@TBDEX_TMP_QUERY_QUERY" query: ',char(13),@TBDEX_TMP_QUERY_QUERY); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Safety checks --======================================================-- + EXEC [PRDEX_TEST_DYNAMIC_SQL] @pQUERY = @TBDEX_TMP_QUERY_QUERY, + @pRETURN_STATUS = 50052, + @pQUERY_NAME = N'@TBDEX_TMP_QUERY_QUERY'; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- run insert statement --===================================================-- + EXEC @RETURN_STATUS = sp_executesql @TBDEX_TMP_QUERY_QUERY; + + IF (@RETURN_STATUS <> 0) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = @RETURN_STATUS; + SET @RETURN_STATUS_TEXT = concat('Check previous error text!',''); + SET @RETURN_ERROR_TEXT = concat('Error occurred in [PRDEX_GET_INPUT_CONTENT] / @TBDEX_TMP_QUERY_QUERY!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Procedure [PRDEX_GET_INPUT_CONTENT] / @TBDEX_TMP_QUERY_QUERY worked just fine!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM CURSOR_TBDEX_TMP_QUERY INTO @TBDEX_TMP_QUERY_GUID,@TBDEX_TMP_QUERY_PROFILE_ID,@TBDEX_TMP_QUERY_BATCH_ID,@TBDEX_TMP_QUERY_QUERY,@TBDEX_TMP_QUERY_COMMENT,@TBDEX_TMP_QUERY_ADDED_WHO,@TBDEX_TMP_QUERY_ADDED_WHEN; + END + CLOSE CURSOR_TBDEX_TMP_QUERY; + DEALLOCATE CURSOR_TBDEX_TMP_QUERY; + ----------------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM CURSOR_TBDEX_TMP_PROCESS_REFERENCES INTO @TBDEX_IN_GUID,@TBDEX_IN_PROFILE_ID,@TBDEX_IN_BATCH_ID,@TBDEX_IN_REFERENCE1,@TBDEX_IN_REFERENCE2,@TBDEX_IN_REFERENCE3,@TBDEX_IN_REFERENCE4,@TBDEX_IN_REFERENCE5,@TBDEX_IN_EXTERNAL_REFERENCE1,@TBDEX_IN_EXTERNAL_REFERENCE2,@TBDEX_IN_EXTERNAL_REFERENCE3,@TBDEX_IN_EXTERNAL_REFERENCE4,@TBDEX_IN_EXTERNAL_REFERENCE5,@TBDEX_IN_COMMENT,@TBDEX_IN_ADDED_WHO,@TBDEX_IN_ADDED_WHEN; + END + CLOSE CURSOR_TBDEX_TMP_PROCESS_REFERENCES; + DEALLOCATE CURSOR_TBDEX_TMP_PROCESS_REFERENCES; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END TRY BEGIN CATCH + + --====================================================-- exception / error --====================================================-- + IF (@@TRANCOUNT > 0) BEGIN + ROLLBACK TRANSACTION; + END; + + PRINT 'ERROR: ' + @RETURN_ERROR_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = CASE WHEN @RETURN_STATUS > 50000 THEN @RETURN_STATUS ELSE 50000 END; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE())); + + PRINT 'ERROR IN PROCEDURE: [' + @MY_PROCEDURE_NAME + ']' + char(13) + @RETURN_ERROR_TEXT; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END CATCH; +GO \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_REGISTER_PROCESS].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_REGISTER_PROCESS].sql new file mode 100644 index 0000000..a984a30 Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_REGISTER_PROCESS].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_MAINPROCESSING].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_MAINPROCESSING].sql new file mode 100644 index 0000000..a67c220 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_MAINPROCESSING].sql @@ -0,0 +1,601 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDEX_RUN_MAINPROCESSING] +-- ================================================================= +-- Sub procedure to run MAINPROCESSING steps +-- +-- Returns: INTEGER; 0 = ok; 0 <> not ok +-- ================================================================= +-- Copyright (c) 2025 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: 01.08.2025 / MK +-- Version Date / Editor: 01.08.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 01.08.2025 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_RUN_MAINPROCESSING]( + @pPROFILE_ID BIGINT, + @pTEST_MODE BIT, + @pASYNC_MODE BIT, + @pBATCH_ID NVARCHAR(25), + @pBATCH_CREATOR NVARCHAR(50), + @pLANGUAGE NVARCHAR(10), + @pLOG_LEVEL NVARCHAR(25), + @pSTART_QUERY NVARCHAR(MAX), + @pSTART_QUERY_VAR1 NVARCHAR(50), + @pSTART_QUERY_VAR2 NVARCHAR(50), + @pSTART_QUERY_VAR3 NVARCHAR(50), + @pSTART_QUERY_VAR4 NVARCHAR(50), + @pSTART_QUERY_VAR5 NVARCHAR(50), + @pMAIN_QUERY NVARCHAR(MAX), + @pMAIN_QUERY_VAR1 NVARCHAR(50), + @pMAIN_QUERY_VAR2 NVARCHAR(50), + @pMAIN_QUERY_VAR3 NVARCHAR(50), + @pMAIN_QUERY_VAR4 NVARCHAR(50), + @pMAIN_QUERY_VAR5 NVARCHAR(50), + @pEND_QUERY NVARCHAR(MAX), + @pEND_QUERY_VAR1 NVARCHAR(50), + @pEND_QUERY_VAR2 NVARCHAR(50), + @pEND_QUERY_VAR3 NVARCHAR(50), + @pEND_QUERY_VAR4 NVARCHAR(50), + @pEND_QUERY_VAR5 NVARCHAR(50), + @pFORCE BIT, + @pPROFILE_NAME NVARCHAR(50), + @pMANDANTOR NVARCHAR(50), + @pEXPORT_TYPE NVARCHAR(50), + @pDEFAULT_DATA_SEPARATOR NVARCHAR(10), + @pTBDEX_TMP_TABLE_SCHEMA SYSNAME, + @pTBDEX_TMP_TABLE_NAME SYSNAME, + @pTBDEX_TMP_TABLE_SCHEMA_AND_NAME NVARCHAR(150), + @pTBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_DROP_QUERY NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_CREATE_QUERY NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_INSERT_QUERY NVARCHAR(MAX) +) +AS +BEGIN TRY + + SET NOCOUNT ON; + SET XACT_ABORT ON; + + -- declare new vars because of parameter sniffing + DECLARE @PROFILE_ID BIGINT = @pPROFILE_ID, + @TEST_MODE BIT = @pTEST_MODE, + @ASYNC_MODE BIT = @pASYNC_MODE, + @BATCH_ID NVARCHAR(25) = @pBATCH_ID, + @BATCH_CREATOR NVARCHAR(128) = ISNULL(@pBATCH_CREATOR,OBJECT_NAME(@@PROCID)), + @LANGUAGE NVARCHAR(10) = @pLANGUAGE, + @LOG_LEVEL NVARCHAR(25) = UPPER(ISNULL(@pLOG_LEVEL,'INFO')), + @START_QUERY NVARCHAR(MAX) = @pSTART_QUERY, + @START_QUERY_VAR1 NVARCHAR(50) = @pSTART_QUERY_VAR1, + @START_QUERY_VAR2 NVARCHAR(50) = @pSTART_QUERY_VAR2, + @START_QUERY_VAR3 NVARCHAR(50) = @pSTART_QUERY_VAR3, + @START_QUERY_VAR4 NVARCHAR(50) = @pSTART_QUERY_VAR4, + @START_QUERY_VAR5 NVARCHAR(50) = @pSTART_QUERY_VAR5, + @MAIN_QUERY NVARCHAR(MAX) = @pMAIN_QUERY, + @MAIN_QUERY_VAR1 NVARCHAR(50) = @pMAIN_QUERY_VAR1, + @MAIN_QUERY_VAR2 NVARCHAR(50) = @pMAIN_QUERY_VAR2, + @MAIN_QUERY_VAR3 NVARCHAR(50) = @pMAIN_QUERY_VAR3, + @MAIN_QUERY_VAR4 NVARCHAR(50) = @pMAIN_QUERY_VAR4, + @MAIN_QUERY_VAR5 NVARCHAR(50) = @pMAIN_QUERY_VAR5, + @END_QUERY NVARCHAR(MAX) = @pEND_QUERY, + @END_QUERY_VAR1 NVARCHAR(50) = @pEND_QUERY_VAR1, + @END_QUERY_VAR2 NVARCHAR(50) = @pEND_QUERY_VAR2, + @END_QUERY_VAR3 NVARCHAR(50) = @pEND_QUERY_VAR3, + @END_QUERY_VAR4 NVARCHAR(50) = @pEND_QUERY_VAR4, + @END_QUERY_VAR5 NVARCHAR(50) = @pEND_QUERY_VAR5, + @FORCE BIT = @pFORCE, + @PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME, + @MANDANTOR NVARCHAR(50) = @pMANDANTOR, + @EXPORT_TYPE NVARCHAR(10) = @pEXPORT_TYPE, + @DEFAULT_DATA_SEPARATOR NVARCHAR(50) = @pDEFAULT_DATA_SEPARATOR, + @TBDEX_TMP_TABLE_SCHEMA SYSNAME = @pTBDEX_TMP_TABLE_SCHEMA, + @TBDEX_TMP_TABLE_NAME SYSNAME = @pTBDEX_TMP_TABLE_NAME, + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME NVARCHAR(150) = @pTBDEX_TMP_TABLE_SCHEMA_AND_NAME, + @TBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_COLUMNS, + @TBDEX_TMP_TABLE_DROP_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_DROP_QUERY, + @TBDEX_TMP_TABLE_CREATE_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_CREATE_QUERY, + @TBDEX_TMP_TABLE_INSERT_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_INSERT_QUERY; + + + -- declare runtime vars + DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ACTIVE_FLAG BIT = 1, + @INACTIVE_FLAG BIT = 0, + @ROW_COUNT1 SMALLINT = 0, + @ROW_COUNT2 SMALLINT = 0, + @GUID BIGINT = 0, + @SEQUENCE TINYINT = 0, + @MAINPROCESSING_NAME NVARCHAR(50) = NULL, + @MAINPROCESSING_TYPE NVARCHAR(10) = NULL, + @MAINPROCESSING_QUERY NVARCHAR(MAX) = NULL, + @ERROR_ACTION NVARCHAR(25) = NULL, + @REFERENCE1 NVARCHAR(150) = NULL, + @REFERENCE2 NVARCHAR(150) = NULL, + @REFERENCE3 NVARCHAR(150) = NULL, + @REFERENCE4 NVARCHAR(150) = NULL, + @REFERENCE5 NVARCHAR(150) = NULL, + @EXTERNAL_REFERENCE1 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE2 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE3 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE4 NVARCHAR(250) = NULL, + @EXTERNAL_REFERENCE5 NVARCHAR(250) = NULL, + @TBDEX_TMP_TABLE_CONTENT NVARCHAR(MAX) = NULL, + @EXPORT_NUMBER_SCHEMA NVARCHAR(25) = NULL, + @EXPORT_NUMBER_COUNTER BIGINT = NULL, + @EXPORT_NUMBER NVARCHAR(25) = NULL, + @PLACEHOLDER_NAME NVARCHAR(50) = NULL, + @PLACEHOLDER NVARCHAR(MAX) = NULL, + @PLACEHOLDER_TYPE NVARCHAR(10) = 'CONST', + @HAS_UNRESOLVED_PLACEHOLDER BIT = 0, + @HAS_RESTRICTED_SQL BIT = 0, + @HAS_UNSAFE_TEMP_TARGET BIT = 0, + @RETURN_STATUS INT = 0, + @RETURN_STATUS_TEXT NVARCHAR(MAX) = concat('START PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(varchar(50),GETDATE(),120)), + @RETURN_ERROR_TEXT NVARCHAR(MAX) = ''; + + PRINT '===================================================================================================='; + PRINT @RETURN_STATUS_TEXT; + PRINT ''; + PRINT 'PARAMETER01 - @PROFILE_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_ID,'')); + PRINT 'PARAMETER02 - @TEST_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@TEST_MODE,'')); + PRINT 'PARAMETER03 - @ASYNC_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@ASYNC_MODE,'')); + PRINT 'PARAMETER04 - @BATCH_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_ID,'')); + PRINT 'PARAMETER05 - @BATCH_CREATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_CREATOR,'')); + PRINT 'PARAMETER06 - @LANGUAGE: ' + CONVERT(NVARCHAR(50),ISNULL(@LANGUAGE,'')); + PRINT 'PARAMETER07 - @LOG_LEVEL: ' + CONVERT(NVARCHAR(50),ISNULL(@LOG_LEVEL,'')); + PRINT 'PARAMETER08 - @START_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY,'')); + PRINT 'PARAMETER09 - @START_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR1,'')); + PRINT 'PARAMETER10 - @START_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR2,'')); + PRINT 'PARAMETER11 - @START_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR3,'')); + PRINT 'PARAMETER12 - @START_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR4,'')); + PRINT 'PARAMETER13 - @START_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR5,'')); + PRINT 'PARAMETER14 - @MAIN_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY,'')); + PRINT 'PARAMETER15 - @MAIN_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR1,'')); + PRINT 'PARAMETER16 - @MAIN_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR2,'')); + PRINT 'PARAMETER17 - @MAIN_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR3,'')); + PRINT 'PARAMETER18 - @MAIN_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR4,'')); + PRINT 'PARAMETER19 - @MAIN_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR5,'')); + PRINT 'PARAMETER20 - @END_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY,'')); + PRINT 'PARAMETER21 - @END_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR1,'')); + PRINT 'PARAMETER22 - @END_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR2,'')); + PRINT 'PARAMETER23 - @END_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR3,'')); + PRINT 'PARAMETER24 - @END_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR4,'')); + PRINT 'PARAMETER25 - @END_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR5,'')); + PRINT 'PARAMETER26 - @FORCE: ' + CONVERT(NVARCHAR(50),ISNULL(@FORCE,'')); + PRINT 'PARAMETER27 - @PROFILE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_NAME,'')); + PRINT 'PARAMETER28 - @MANDANTOR: ' + CONVERT(NVARCHAR(50),ISNULL(@MANDANTOR,'')); + PRINT 'PARAMETER29 - @EXPORT_TYPE: ' + CONVERT(NVARCHAR(50),ISNULL(@EXPORT_TYPE,'')); + PRINT 'PARAMETER30 - @DEFAULT_DATA_SEPARATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@DEFAULT_DATA_SEPARATOR,'')); + PRINT 'PARAMETER31 - @TBDEX_TMP_TABLE_SCHEMA: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_SCHEMA,'')); + PRINT 'PARAMETER32 - @TBDEX_TMP_TABLE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_NAME,'')); + PRINT 'PARAMETER33 - @TBDEX_TMP_TABLE_SCHEMA_AND_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_SCHEMA_AND_NAME,'')); + PRINT 'PARAMETER34 - @TBDEX_TMP_TABLE_COLUMNS: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_COLUMNS,'')); + PRINT 'PARAMETER35 - @TBDEX_TMP_TABLE_DROP_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_DROP_QUERY,'')); + PRINT 'PARAMETER36 - @TBDEX_TMP_TABLE_CREATE_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_CREATE_QUERY,'')); + PRINT 'PARAMETER37 - @TBDEX_TMP_TABLE_INSERT_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_INSERT_QUERY,'')); + PRINT ''; + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --================================================-- Check for export columns --=================================================-- + SET @ROW_COUNT1 = (SELECT count(*) FROM [TBDEX_CFG_OUT_STRUCTURE] AS [COS] + WHERE [COS].[ACTIVE] = @ACTIVE_FLAG AND [COS].[EXPORT_TYPE] = @EXPORT_TYPE AND [COS].[PROFILE_ID] = @PROFILE_ID + AND [COS].[LANGUAGE] in (REPLACE(@LANGUAGE,'-','_'),REPLACE(@LANGUAGE,'_','-'))); + IF (@ROW_COUNT1 = 0) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50022; + SET @RETURN_STATUS_TEXT = concat('',''); + SET @RETURN_ERROR_TEXT = concat('Found no valid column configuration in [TBDEX_CFG_OUT_STRUCTURE]!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found a valid column configuration in [TBDEX_CFG_OUT_STRUCTURE]!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --======================================================-- Safety checks --======================================================-- + EXEC [PRDEX_TEST_DYNAMIC_SQL] @pQUERY = @TBDEX_TMP_TABLE_DROP_QUERY, + @pRETURN_STATUS = 50057, + @pQUERY_NAME = N'@TBDEX_TMP_TABLE_DROP_QUERY'; + + EXEC [PRDEX_TEST_DYNAMIC_SQL] @pQUERY = @TBDEX_TMP_TABLE_CREATE_QUERY, + @pRETURN_STATUS = 50057, + @pQUERY_NAME = N'@TBDEX_TMP_TABLE_CREATE_QUERY'; + + SET @HAS_UNSAFE_TEMP_TARGET = CASE WHEN + (PATINDEX('%DROP TABLE%',UPPER(@TBDEX_TMP_TABLE_DROP_QUERY)) = 0) OR + (PATINDEX('%CREATE TABLE%',UPPER(@TBDEX_TMP_TABLE_CREATE_QUERY)) = 0) OR + ( + (PATINDEX('%TEMPDB..%',UPPER(@TBDEX_TMP_TABLE_DROP_QUERY)) = 0) + AND (PATINDEX('%#%',@TBDEX_TMP_TABLE_DROP_QUERY) = 0) + ) OR + ( + (PATINDEX('%TEMPDB..%',UPPER(@TBDEX_TMP_TABLE_CREATE_QUERY)) = 0) + AND (PATINDEX('%#%',@TBDEX_TMP_TABLE_CREATE_QUERY) = 0) + ) + THEN 1 ELSE 0 END; + + IF (@HAS_UNSAFE_TEMP_TARGET = 1) BEGIN + + SET @RETURN_STATUS = 50057; + SET @RETURN_STATUS_TEXT = concat('Blocked unsafe temp table query content in [PRDEX_RUN_MAINPROCESSING]!',''); + SET @RETURN_ERROR_TEXT = concat('Detected unresolved placeholders, restricted statements, or non-tempdb/non-# table target in drop/create query.',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --============================================-- Drop dynamic temp table, if exists --===========================================-- + PRINT concat('INFO: ','Executing drop cmd:',char(13),@TBDEX_TMP_TABLE_DROP_QUERY); + EXEC sp_executesql @TBDEX_TMP_TABLE_DROP_QUERY; + ----------------------------------------------------------------------------------------------------------------------------------- + + --================================================-- create dynamic temp table --================================================-- + PRINT concat('INFO: ','Executing create cmd:',char(13),@TBDEX_TMP_TABLE_CREATE_QUERY); + EXEC sp_executesql @TBDEX_TMP_TABLE_CREATE_QUERY; -- The structure is based on the config of the table "[TBDEX_CFG_OUT_STRUCTURE]" + ----------------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Check if table was created --================================================-- + IF (OBJECT_ID(concat('tempdb..',@TBDEX_TMP_TABLE_SCHEMA_AND_NAME), 'U') IS NULL) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50006; + SET @RETURN_STATUS_TEXT = concat('','') + SET @RETURN_ERROR_TEXT = concat('Cannot create the temp table: ',@TBDEX_TMP_TABLE_SCHEMA_AND_NAME,'!'); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('The temp table: ',@TBDEX_TMP_TABLE_SCHEMA_AND_NAME,' has been created!'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --=============================================-- Check if ref table has content --==============================================-- + SET @ROW_COUNT2 = (SELECT COUNT(*) FROM [TBDEX_TMP_PROCESS_REFERENCES] WITH (SNAPSHOT) + WHERE [PROFILE_ID] = @PROFILE_ID + AND [BATCH_ID] = @BATCH_ID + AND [ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME)); + + IF (@ROW_COUNT2 = 0) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50010; + SET @RETURN_STATUS_TEXT = concat('',''); + SET @RETURN_ERROR_TEXT = concat('Found no fitting lines [TBDEX_TMP_PROCESS_REFERENCES]!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found ',@ROW_COUNT2,' fitting lines in [TBDEX_TMP_PROCESS_REFERENCES]!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --===========================================-- Get referencies from input table --==============================================-- + DECLARE CURSOR_MAINPROCESSING CURSOR + LOCAL FAST_FORWARD FOR + SELECT [REFERENCE1] as 'REFERENCE1', + [REFERENCE2] as 'REFERENCE2', + [REFERENCE3] as 'REFERENCE3', + [REFERENCE4] as 'REFERENCE4', + [REFERENCE5] as 'REFERENCE5', + [EXTERNAL_REFERENCE1] as 'EXTERNAL_REFERENCE1', + [EXTERNAL_REFERENCE2] as 'EXTERNAL_REFERENCE2', + [EXTERNAL_REFERENCE3] as 'EXTERNAL_REFERENCE3', + [EXTERNAL_REFERENCE4] as 'EXTERNAL_REFERENCE4', + [EXTERNAL_REFERENCE5] as 'EXTERNAL_REFERENCE5', + [EXPORT_NUMBER_COUNTER] as 'EXPORT_NUMBER_COUNTER', + [EXPORT_NUMBER] as 'EXPORT_NUMBER' + FROM [TBDEX_TMP_PROCESS_REFERENCES] WITH (SNAPSHOT) + WHERE [PROFILE_ID] = @PROFILE_ID + AND [BATCH_ID] = @BATCH_ID + AND [ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME); + + OPEN CURSOR_MAINPROCESSING + FETCH NEXT FROM CURSOR_MAINPROCESSING INTO @REFERENCE1,@REFERENCE2,@REFERENCE3,@REFERENCE4,@REFERENCE5,@EXTERNAL_REFERENCE1,@EXTERNAL_REFERENCE2,@EXTERNAL_REFERENCE3,@EXTERNAL_REFERENCE4,@EXTERNAL_REFERENCE5,@EXPORT_NUMBER_COUNTER,@EXPORT_NUMBER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + --=================================================-- Call input procedure --==================================================-- + EXEC @RETURN_STATUS = [PRDEX_SET_QUERY] @pPROFILE_ID = @PROFILE_ID, + @pTEST_MODE = @TEST_MODE, + @pASYNC_MODE = @ASYNC_MODE, + @pBATCH_ID = @BATCH_ID, + @pBATCH_CREATOR = @BATCH_CREATOR, + @pLANGUAGE = @LANGUAGE, + @pLOG_LEVEL = @LOG_LEVEL, + @pSTART_QUERY = @START_QUERY, + @pSTART_QUERY_VAR1 = @START_QUERY_VAR1, + @pSTART_QUERY_VAR2 = @START_QUERY_VAR2, + @pSTART_QUERY_VAR3 = @START_QUERY_VAR3, + @pSTART_QUERY_VAR4 = @START_QUERY_VAR4, + @pSTART_QUERY_VAR5 = @START_QUERY_VAR5, + @pMAIN_QUERY = @MAIN_QUERY, + @pMAIN_QUERY_VAR1 = @MAIN_QUERY_VAR1, + @pMAIN_QUERY_VAR2 = @MAIN_QUERY_VAR2, + @pMAIN_QUERY_VAR3 = @MAIN_QUERY_VAR3, + @pMAIN_QUERY_VAR4 = @MAIN_QUERY_VAR4, + @pMAIN_QUERY_VAR5 = @MAIN_QUERY_VAR5, + @pEND_QUERY = @END_QUERY, + @pEND_QUERY_VAR1 = @END_QUERY_VAR1, + @pEND_QUERY_VAR2 = @END_QUERY_VAR2, + @pEND_QUERY_VAR3 = @END_QUERY_VAR3, + @pEND_QUERY_VAR4 = @END_QUERY_VAR4, + @pEND_QUERY_VAR5 = @END_QUERY_VAR5, + @pFORCE = @FORCE, + @pPROFILE_NAME = @PROFILE_NAME, + @pMANDANTOR = @MANDANTOR, + @pEXPORT_TYPE = @EXPORT_TYPE, + @pEXPORT_NUMBER_SCHEMA = @EXPORT_NUMBER_SCHEMA, + @pDEFAULT_DATA_SEPARATOR = @DEFAULT_DATA_SEPARATOR, + @pREFERENCE1 = @REFERENCE1, + @pREFERENCE2 = @REFERENCE2, + @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, + @pREFERENCE5 = @REFERENCE5, + @pEXTERNAL_REFERENCE1 = @EXTERNAL_REFERENCE1, + @pEXTERNAL_REFERENCE2 = @EXTERNAL_REFERENCE2, + @pEXTERNAL_REFERENCE3 = @EXTERNAL_REFERENCE3, + @pEXTERNAL_REFERENCE4 = @EXTERNAL_REFERENCE4, + @pEXTERNAL_REFERENCE5 = @EXTERNAL_REFERENCE5; + + IF (@RETURN_STATUS <> 0) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = @RETURN_STATUS; + SET @RETURN_STATUS_TEXT = concat('Error occurred in [PRDEX_SET_QUERY]!',''); + SET @RETURN_ERROR_TEXT = concat('Check previous error text!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Procedure [PRDEX_SET_QUERY] worked just fine!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --=============================================-- Call input content procedure --==============================================-- + EXEC @RETURN_STATUS = [PRDEX_GET_INPUT_CONTENT] @pPROFILE_ID = @PROFILE_ID, + @pTEST_MODE = @TEST_MODE, + @pASYNC_MODE = @ASYNC_MODE, + @pBATCH_ID = @BATCH_ID, + @pBATCH_CREATOR = @BATCH_CREATOR, + @pLANGUAGE = @LANGUAGE, + @pLOG_LEVEL = @LOG_LEVEL, + @pSTART_QUERY = @START_QUERY, + @pSTART_QUERY_VAR1 = @START_QUERY_VAR1, + @pSTART_QUERY_VAR2 = @START_QUERY_VAR2, + @pSTART_QUERY_VAR3 = @START_QUERY_VAR3, + @pSTART_QUERY_VAR4 = @START_QUERY_VAR4, + @pSTART_QUERY_VAR5 = @START_QUERY_VAR5, + @pMAIN_QUERY = @MAIN_QUERY, + @pMAIN_QUERY_VAR1 = @MAIN_QUERY_VAR1, + @pMAIN_QUERY_VAR2 = @MAIN_QUERY_VAR2, + @pMAIN_QUERY_VAR3 = @MAIN_QUERY_VAR3, + @pMAIN_QUERY_VAR4 = @MAIN_QUERY_VAR4, + @pMAIN_QUERY_VAR5 = @MAIN_QUERY_VAR5, + @pEND_QUERY = @END_QUERY, + @pEND_QUERY_VAR1 = @END_QUERY_VAR1, + @pEND_QUERY_VAR2 = @END_QUERY_VAR2, + @pEND_QUERY_VAR3 = @END_QUERY_VAR3, + @pEND_QUERY_VAR4 = @END_QUERY_VAR4, + @pEND_QUERY_VAR5 = @END_QUERY_VAR5, + @pFORCE = @FORCE, + @pPROFILE_NAME = @PROFILE_NAME, + @pMANDANTOR = @MANDANTOR, + @pEXPORT_TYPE = @EXPORT_TYPE, + @pEXPORT_NUMBER_SCHEMA = @EXPORT_NUMBER_SCHEMA, + @pDEFAULT_DATA_SEPARATOR = @DEFAULT_DATA_SEPARATOR, + @pTBDEX_TMP_TABLE_SCHEMA = @TBDEX_TMP_TABLE_SCHEMA, + @pTBDEX_TMP_TABLE_NAME = @TBDEX_TMP_TABLE_NAME, + @pTBDEX_TMP_TABLE_SCHEMA_AND_NAME = @TBDEX_TMP_TABLE_SCHEMA_AND_NAME, + @pTBDEX_TMP_TABLE_COLUMNS = @TBDEX_TMP_TABLE_COLUMNS, + @pTBDEX_TMP_TABLE_DROP_QUERY = @TBDEX_TMP_TABLE_DROP_QUERY, + @pTBDEX_TMP_TABLE_CREATE_QUERY = @TBDEX_TMP_TABLE_CREATE_QUERY, + @pTBDEX_TMP_TABLE_INSERT_QUERY = @TBDEX_TMP_TABLE_INSERT_QUERY, + @pREFERENCE1 = @REFERENCE1, + @pREFERENCE2 = @REFERENCE2, + @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, + @pREFERENCE5 = @REFERENCE5, + @pEXTERNAL_REFERENCE1 = @EXTERNAL_REFERENCE1, + @pEXTERNAL_REFERENCE2 = @EXTERNAL_REFERENCE2, + @pEXTERNAL_REFERENCE3 = @EXTERNAL_REFERENCE3, + @pEXTERNAL_REFERENCE4 = @EXTERNAL_REFERENCE4, + @pEXTERNAL_REFERENCE5 = @EXTERNAL_REFERENCE5; + + IF (@RETURN_STATUS <> 0) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = @RETURN_STATUS; + SET @RETURN_STATUS_TEXT = concat('Error occurred in [PRDEX_GET_INPUT_CONTENT]!',''); + SET @RETURN_ERROR_TEXT = concat('Check previous error text!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Procedure [PRDEX_GET_INPUT_CONTENT] worked just fine!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM CURSOR_MAINPROCESSING INTO @REFERENCE1,@REFERENCE2,@REFERENCE3,@REFERENCE4,@REFERENCE5,@EXTERNAL_REFERENCE1,@EXTERNAL_REFERENCE2,@EXTERNAL_REFERENCE3,@EXTERNAL_REFERENCE4,@EXTERNAL_REFERENCE5,@EXPORT_NUMBER_COUNTER,@EXPORT_NUMBER; + END + CLOSE CURSOR_MAINPROCESSING; + DEALLOCATE CURSOR_MAINPROCESSING; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END TRY BEGIN CATCH + + --====================================================-- exception / error --====================================================-- + IF (@@TRANCOUNT > 0) BEGIN + ROLLBACK TRANSACTION; + END; + + PRINT 'ERROR: ' + @RETURN_ERROR_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = CASE WHEN @RETURN_STATUS > 50000 THEN @RETURN_STATUS ELSE 50000 END; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE())); + + PRINT 'ERROR IN PROCEDURE: [' + @MY_PROCEDURE_NAME + ']' + char(13) + @RETURN_ERROR_TEXT; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END CATCH; +GO \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_POSTPROCESSING].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_POSTPROCESSING].sql new file mode 100644 index 0000000..923db48 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_POSTPROCESSING].sql @@ -0,0 +1,555 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDEX_RUN_POSTPROCESSING] +-- ================================================================= +-- Sub procedure to run POSTPROCESSING steps +-- +-- Returns: INTEGER; 0 = ok; 0 <> not ok +-- ================================================================= +-- Copyright (c) 2025 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: 01.08.2025 / MK +-- Version Date / Editor: 01.08.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 01.08.2025 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_RUN_POSTPROCESSING]( + @pPROFILE_ID BIGINT, + @pTEST_MODE BIT, + @pASYNC_MODE BIT, + @pBATCH_ID NVARCHAR(25), + @pBATCH_CREATOR NVARCHAR(50), + @pLANGUAGE NVARCHAR(10), + @pLOG_LEVEL NVARCHAR(25), + @pSTART_QUERY NVARCHAR(MAX), + @pSTART_QUERY_VAR1 NVARCHAR(50), + @pSTART_QUERY_VAR2 NVARCHAR(50), + @pSTART_QUERY_VAR3 NVARCHAR(50), + @pSTART_QUERY_VAR4 NVARCHAR(50), + @pSTART_QUERY_VAR5 NVARCHAR(50), + @pMAIN_QUERY NVARCHAR(MAX), + @pMAIN_QUERY_VAR1 NVARCHAR(50), + @pMAIN_QUERY_VAR2 NVARCHAR(50), + @pMAIN_QUERY_VAR3 NVARCHAR(50), + @pMAIN_QUERY_VAR4 NVARCHAR(50), + @pMAIN_QUERY_VAR5 NVARCHAR(50), + @pEND_QUERY NVARCHAR(MAX), + @pEND_QUERY_VAR1 NVARCHAR(50), + @pEND_QUERY_VAR2 NVARCHAR(50), + @pEND_QUERY_VAR3 NVARCHAR(50), + @pEND_QUERY_VAR4 NVARCHAR(50), + @pEND_QUERY_VAR5 NVARCHAR(50), + @pFORCE BIT, + @pPROFILE_NAME NVARCHAR(50), + @pMANDANTOR NVARCHAR(50), + @pEXPORT_TYPE NVARCHAR(50), + @pDEFAULT_DATA_SEPARATOR NVARCHAR(10), + @pTBDEX_TMP_TABLE_SCHEMA NVARCHAR(150), + @pTBDEX_TMP_TABLE_NAME NVARCHAR(150), + @pTBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX) +) +AS +BEGIN TRY + + SET NOCOUNT ON; + + -- declare new vars because of parameter sniffing + DECLARE @PROFILE_ID BIGINT = @pPROFILE_ID, + @TEST_MODE BIT = @pTEST_MODE, + @ASYNC_MODE BIT = @pASYNC_MODE, + @BATCH_ID NVARCHAR(25) = @pBATCH_ID, + @BATCH_CREATOR NVARCHAR(128) = ISNULL(@pBATCH_CREATOR,OBJECT_NAME(@@PROCID)), + @LANGUAGE NVARCHAR(10) = @pLANGUAGE, + @LOG_LEVEL NVARCHAR(25) = UPPER(ISNULL(@pLOG_LEVEL,'INFO')), + @START_QUERY NVARCHAR(MAX) = @pSTART_QUERY, + @START_QUERY_VAR1 NVARCHAR(50) = @pSTART_QUERY_VAR1, + @START_QUERY_VAR2 NVARCHAR(50) = @pSTART_QUERY_VAR2, + @START_QUERY_VAR3 NVARCHAR(50) = @pSTART_QUERY_VAR3, + @START_QUERY_VAR4 NVARCHAR(50) = @pSTART_QUERY_VAR4, + @START_QUERY_VAR5 NVARCHAR(50) = @pSTART_QUERY_VAR5, + @MAIN_QUERY NVARCHAR(MAX) = @pMAIN_QUERY, + @MAIN_QUERY_VAR1 NVARCHAR(50) = @pMAIN_QUERY_VAR1, + @MAIN_QUERY_VAR2 NVARCHAR(50) = @pMAIN_QUERY_VAR2, + @MAIN_QUERY_VAR3 NVARCHAR(50) = @pMAIN_QUERY_VAR3, + @MAIN_QUERY_VAR4 NVARCHAR(50) = @pMAIN_QUERY_VAR4, + @MAIN_QUERY_VAR5 NVARCHAR(50) = @pMAIN_QUERY_VAR5, + @END_QUERY NVARCHAR(MAX) = @pEND_QUERY, + @END_QUERY_VAR1 NVARCHAR(50) = @pEND_QUERY_VAR1, + @END_QUERY_VAR2 NVARCHAR(50) = @pEND_QUERY_VAR2, + @END_QUERY_VAR3 NVARCHAR(50) = @pEND_QUERY_VAR3, + @END_QUERY_VAR4 NVARCHAR(50) = @pEND_QUERY_VAR4, + @END_QUERY_VAR5 NVARCHAR(50) = @pEND_QUERY_VAR5, + @FORCE BIT = @pFORCE, + @PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME, + @MANDANTOR NVARCHAR(50) = @pMANDANTOR, + @EXPORT_TYPE NVARCHAR(10) = @pEXPORT_TYPE, + @DEFAULT_DATA_SEPARATOR NVARCHAR(50) = @pDEFAULT_DATA_SEPARATOR, + @TBDEX_TMP_TABLE_SCHEMA NVARCHAR(150) = @pTBDEX_TMP_TABLE_SCHEMA, + @TBDEX_TMP_TABLE_NAME NVARCHAR(150) = @pTBDEX_TMP_TABLE_NAME, + @TBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_COLUMNS; + + -- declare virtual table for POSTPROCESSING steps + DECLARE @vTBDEX_CFG_RESOURCES_POSTPROCESSING as TABLE ( + [GUID] BIGINT NOT NULL, + [PROFILE_ID] BIGINT NOT NULL, + [SEQUENCE] TINYINT NOT NULL, + [POSTPROCESSING_NAME] NVARCHAR(50) NOT NULL, + [POSTPROCESSING_TYPE] NVARCHAR(10) NOT NULL, + [POSTPROCESSING_QUERY] NVARCHAR(max) NOT NULL, + [ERROR_ACTION] NVARCHAR(25) NOT NULL); + + -- declare runtime vars + DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ACTIVE_FLAG BIT = 1, + @INACTIVE_FLAG BIT = 0, + @STEP_COUNTER INT = 0, + @ROW_COUNT SMALLINT = 0, + @GUID BIGINT = 0, + @SEQUENCE TINYINT = 0, + @POSTPROCESSING_NAME NVARCHAR(50) = NULL, + @POSTPROCESSING_TYPE NVARCHAR(10) = NULL, + @POSTPROCESSING_QUERY NVARCHAR(MAX) = NULL, + @ERROR_ACTION NVARCHAR(25) = NULL, + @REFERENCE1 NVARCHAR(150) = NULL, + @REFERENCE2 NVARCHAR(150) = NULL, + @REFERENCE3 NVARCHAR(150) = NULL, + @REFERENCE4 NVARCHAR(150) = NULL, + @REFERENCE5 NVARCHAR(150) = NULL, + @PLACEHOLDER_NAME NVARCHAR(50) = 'QUERY_POSTPROCESSING', + @PLACEHOLDER NVARCHAR(MAX) = NULL, + @PLACEHOLDER_TYPE NVARCHAR(10) = 'CONST', + @HAS_UNRESOLVED_PLACEHOLDER BIT = 0, + @HAS_RESTRICTED_SQL BIT = 0, + @RETURN_STATUS INT = 0, + @RETURN_STATUS_TEXT NVARCHAR(MAX) = concat('START PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(varchar(50),GETDATE(),120)), + @RETURN_ERROR_TEXT NVARCHAR(MAX) = ''; + + PRINT '===================================================================================================='; + PRINT @RETURN_STATUS_TEXT; + PRINT ''; + PRINT 'PARAMETER01 - @PROFILE_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_ID,'')); + PRINT 'PARAMETER02 - @TEST_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@TEST_MODE,'')); + PRINT 'PARAMETER03 - @ASYNC_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@ASYNC_MODE,'')); + PRINT 'PARAMETER04 - @BATCH_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_ID,'')); + PRINT 'PARAMETER05 - @BATCH_CREATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_CREATOR,'')); + PRINT 'PARAMETER06 - @LANGUAGE: ' + CONVERT(NVARCHAR(50),ISNULL(@LANGUAGE,'')); + PRINT 'PARAMETER07 - @LOG_LEVEL: ' + CONVERT(NVARCHAR(50),ISNULL(@LOG_LEVEL,'')); + PRINT 'PARAMETER08 - @START_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY,'')); + PRINT 'PARAMETER09 - @START_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR1,'')); + PRINT 'PARAMETER10 - @START_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR2,'')); + PRINT 'PARAMETER11 - @START_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR3,'')); + PRINT 'PARAMETER12 - @START_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR4,'')); + PRINT 'PARAMETER13 - @START_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR5,'')); + PRINT 'PARAMETER14 - @MAIN_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY,'')); + PRINT 'PARAMETER15 - @MAIN_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR1,'')); + PRINT 'PARAMETER16 - @MAIN_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR2,'')); + PRINT 'PARAMETER17 - @MAIN_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR3,'')); + PRINT 'PARAMETER18 - @MAIN_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR4,'')); + PRINT 'PARAMETER19 - @MAIN_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR5,'')); + PRINT 'PARAMETER20 - @END_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY,'')); + PRINT 'PARAMETER21 - @END_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR1,'')); + PRINT 'PARAMETER22 - @END_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR2,'')); + PRINT 'PARAMETER23 - @END_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR3,'')); + PRINT 'PARAMETER24 - @END_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR4,'')); + PRINT 'PARAMETER25 - @END_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR5,'')); + PRINT 'PARAMETER26 - @FORCE: ' + CONVERT(NVARCHAR(50),ISNULL(@FORCE,'')); + PRINT 'PARAMETER27 - @PROFILE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_NAME,'')); + PRINT 'PARAMETER28 - @MANDANTOR: ' + CONVERT(NVARCHAR(50),ISNULL(@MANDANTOR,'')); + PRINT 'PARAMETER29 - @EXPORT_TYPE: ' + CONVERT(NVARCHAR(50),ISNULL(@EXPORT_TYPE,'')); + PRINT 'PARAMETER30 - @DEFAULT_DATA_SEPARATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@DEFAULT_DATA_SEPARATOR,'')); + PRINT 'PARAMETER31 - @TBDEX_TMP_TABLE_SCHEMA: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_SCHEMA,'')); + PRINT 'PARAMETER32 - @TBDEX_TMP_TABLE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_NAME,'')); + PRINT 'PARAMETER33 - @TBDEX_TMP_TABLE_COLUMNS: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_COLUMNS,'')); + PRINT ''; + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --===================================================-- POSTPROCESSING steps --===================================================-- + IF (@TEST_MODE = 1) OR (@ASYNC_MODE = 1) BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('TEST_MODE and/or ASYNC_MODE are enabled!','Exiting...'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + + END; ELSE BEGIN + + INSERT INTO @vTBDEX_CFG_RESOURCES_POSTPROCESSING([GUID],[PROFILE_ID],[SEQUENCE],[POSTPROCESSING_NAME],[POSTPROCESSING_TYPE],[POSTPROCESSING_QUERY],[ERROR_ACTION]) + SELECT TOP 100 PERCENT [GUID],[PROFILE_ID],[SEQUENCE],[PLACEHOLDER_NAME], [PLACEHOLDER_TYPE],LTRIM(RTRIM([PLACEHOLDER])),CASE WHEN [ERROR_ACTION] = 1 THEN 'CONTINUE' ELSE 'STOP' END + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (@PROFILE_ID,0) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_NAME])) = @PLACEHOLDER_NAME + ORDER BY [PROFILE_ID] ASC,[GUID] DESC; + + SET @ROW_COUNT = (ISNULL((SELECT COUNT(*) FROM @vTBDEX_CFG_RESOURCES_POSTPROCESSING),0)); + IF (@ROW_COUNT = 0) BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found no assigned POSTPROCESSING steps in [TBDEX_CFG_RESOURCES] table! ',', Exiting POSTPROCESSING...'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'WARN: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found ',@ROW_COUNT,' assigned POSTPROCESSING steps in [TBDEX_CFG_RESOURCES] table!',', Engaging POSTPROCESSING...'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --================================================-- Run loop for POSTPROCESSING --===============================================-- + DECLARE CURSOR_POSTPROCESSING CURSOR + LOCAL FAST_FORWARD FOR + SELECT [GUID] as 'GUID', + [PROFILE_ID] as 'PROFILE_ID', + [SEQUENCE] as 'SEQUENCE', + [POSTPROCESSING_NAME] as 'POSTPROCESSING_NAME', + [POSTPROCESSING_TYPE] as 'POSTPROCESSING_TYPE', + [POSTPROCESSING_QUERY] as 'POSTPROCESSING_QUERY', + [ERROR_ACTION] as 'ERROR_ACTION' + FROM @vTBDEX_CFG_RESOURCES_POSTPROCESSING + ORDER BY [PROFILE_ID] ASC,[SEQUENCE] ASC, [GUID] DESC; + + OPEN CURSOR_POSTPROCESSING + FETCH NEXT FROM CURSOR_POSTPROCESSING INTO @GUID, @PROFILE_ID, @SEQUENCE, @POSTPROCESSING_NAME, @POSTPROCESSING_TYPE, @POSTPROCESSING_QUERY, @ERROR_ACTION; + WHILE @@FETCH_STATUS = 0 + BEGIN + SET @STEP_COUNTER = @STEP_COUNTER + 1; + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Running POSTPROCESSING step with GUID: ',@GUID,'. The set "ERROR_ACTION" behavior is: ',@ERROR_ACTION); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + BEGIN TRY + + --==================================================-- Handle placeholders --==================================================-- + PRINT ''; + PRINT 'Replacing placeholders...'; + + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%PROFILE_ID%',ISNULL(@PROFILE_ID,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%TEST_MODE%',ISNULL(@TEST_MODE,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%ASYNC_MODE%',ISNULL(@ASYNC_MODE,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%BATCH_ID%',ISNULL(@BATCH_ID,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%BATCH_CREATOR%',ISNULL(@BATCH_CREATOR,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%LANGUAGE%',ISNULL(@LANGUAGE,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%LOG_LEVEL%',ISNULL(@LOG_LEVEL,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%START_QUERY%',ISNULL(@START_QUERY,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%START_QUERY_VAR1%',ISNULL(@START_QUERY_VAR1,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%START_QUERY_VAR2%',ISNULL(@START_QUERY_VAR2,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%START_QUERY_VAR3%',ISNULL(@START_QUERY_VAR3,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%START_QUERY_VAR4%',ISNULL(@START_QUERY_VAR4,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%START_QUERY_VAR5%',ISNULL(@START_QUERY_VAR5,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MAIN_QUERY%',ISNULL(@MAIN_QUERY,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MAIN_QUERY_VAR1%',ISNULL(@MAIN_QUERY_VAR1,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MAIN_QUERY_VAR2%',ISNULL(@MAIN_QUERY_VAR2,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MAIN_QUERY_VAR3%',ISNULL(@MAIN_QUERY_VAR3,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MAIN_QUERY_VAR4%',ISNULL(@MAIN_QUERY_VAR4,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MAIN_QUERY_VAR5%',ISNULL(@MAIN_QUERY_VAR5,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%END_QUERY%',ISNULL(@END_QUERY,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%END_QUERY_VAR1%',ISNULL(@END_QUERY_VAR1,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%END_QUERY_VAR2%',ISNULL(@END_QUERY_VAR2,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%END_QUERY_VAR3%',ISNULL(@END_QUERY_VAR3,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%END_QUERY_VAR4%',ISNULL(@END_QUERY_VAR4,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%END_QUERY_VAR5%',ISNULL(@END_QUERY_VAR5,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%FORCE%',ISNULL(@FORCE,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MY_PROCEDURE_NAME%',ISNULL(@MY_PROCEDURE_NAME,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%PROFILE_NAME%',ISNULL(@PROFILE_NAME,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%MANDANTOR%',ISNULL(@MANDANTOR,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%EXPORT_TYPE%',ISNULL(@EXPORT_TYPE,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%REFERENCE1%',ISNULL(@REFERENCE1,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%REFERENCE2%',ISNULL(@REFERENCE2,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%REFERENCE3%',ISNULL(@REFERENCE3,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%REFERENCE4%',ISNULL(@REFERENCE4,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%REFERENCE5%',ISNULL(@REFERENCE5,'')); + + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%TBDEX_TMP_TABLE_SCHEMA%',ISNULL(@TBDEX_TMP_TABLE_SCHEMA,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%TBDEX_TMP_TABLE_NAME%',ISNULL(@TBDEX_TMP_TABLE_NAME,'')); + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,'%TBDEX_TMP_TABLE_COLUMNS%',ISNULL(@TBDEX_TMP_TABLE_COLUMNS,'')); + + DECLARE CURSOR_PLACEHOLDER CURSOR + LOCAL FAST_FORWARD FOR + SELECT [PLACEHOLDER_NAME] as 'Placeholder_Name', [PLACEHOLDER] as 'Placeholder' + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @PLACEHOLDER_TYPE + ORDER BY [SEQUENCE] ASC; + + OPEN CURSOR_PLACEHOLDER + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @POSTPROCESSING_QUERY = REPLACE(@POSTPROCESSING_QUERY,concat('%',@PLACEHOLDER_NAME,'%'),ISNULL(@PLACEHOLDER,'')); + + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + END + CLOSE CURSOR_PLACEHOLDER; + DEALLOCATE CURSOR_PLACEHOLDER; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Prepared "@POSTPROCESSING_QUERY" (length: ',LEN(@POSTPROCESSING_QUERY),', preview: ',LEFT(@POSTPROCESSING_QUERY,500),')'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Safety checks --======================================================-- + EXEC [PRDEX_TEST_DYNAMIC_SQL] @pQUERY = @POSTPROCESSING_QUERY, + @pRETURN_STATUS = 50056, + @pQUERY_NAME = N'@POSTPROCESSING_QUERY'; + ----------------------------------------------------------------------------------------------------------------------------------- + + --=========================================-- Finally execute the POSTPROCESSING_QUERY --=========================================-- + EXEC sp_executesql @POSTPROCESSING_QUERY; + ----------------------------------------------------------------------------------------------------------------------------------- + + END TRY BEGIN CATCH + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 50018; + SET @RETURN_STATUS_TEXT = concat('',''); + SET @RETURN_ERROR_TEXT = CONVERT(NVARCHAR(500),ERROR_MESSAGE()); + + PRINT 'ERROR: ' + @RETURN_ERROR_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END CATCH; + ----------------------------------------------------------------------------------------------------------------------------------- + + IF (@RETURN_STATUS <> 0) BEGIN + + IF (@ERROR_ACTION <> 'CONTINUE') BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = @RETURN_STATUS; + SET @RETURN_STATUS_TEXT = concat('Error occurred in [PRDEX_RUN_POSTPROCESSING]!',' Exiting...'); + SET @RETURN_ERROR_TEXT = ISNULL(@RETURN_ERROR_TEXT,'Unknown postprocessing error.'); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = @RETURN_STATUS; + SET @RETURN_STATUS_TEXT = concat('Error occurred in [PRDEX_RUN_POSTPROCESSING]!',' Continue...'); + SET @RETURN_ERROR_TEXT = ISNULL(@RETURN_ERROR_TEXT,'Unknown postprocessing error.'); + + PRINT 'ERROR: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Procedure [PRDEX_RUN_POSTPROCESSING] worked just fine!',''); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + FETCH NEXT FROM CURSOR_POSTPROCESSING INTO @GUID, @PROFILE_ID, @SEQUENCE, @POSTPROCESSING_NAME, @POSTPROCESSING_TYPE, @POSTPROCESSING_QUERY, @ERROR_ACTION; + END + CLOSE CURSOR_POSTPROCESSING; + DEALLOCATE CURSOR_POSTPROCESSING; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END TRY BEGIN CATCH + + --====================================================-- exception / error --====================================================-- + IF (@@TRANCOUNT > 0) BEGIN + ROLLBACK TRANSACTION; + END; + + PRINT 'ERROR: ' + @RETURN_ERROR_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = CASE WHEN @RETURN_STATUS > 50000 THEN @RETURN_STATUS ELSE 50000 END; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE())); + + PRINT 'ERROR IN PROCEDURE: [' + @MY_PROCEDURE_NAME + ']' + char(13) + @RETURN_ERROR_TEXT; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END CATCH; +GO \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_PREPROCESSING].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_PREPROCESSING].sql new file mode 100644 index 0000000..de6b037 Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_RUN_PREPROCESSING].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_EXPORT_FILENAME].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_EXPORT_FILENAME].sql new file mode 100644 index 0000000..9488f90 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_EXPORT_FILENAME].sql @@ -0,0 +1,101 @@ +USE [DD_ECM] +GO + +/****** Object: StoredProcedure [dbo].[PRDEX_BUILD_FILE_NAME] Script Date: 08.12.2025 21:34:37 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +-- TSQL Prozedur - Zentrale Logik zur Erstellung der Dateinamen f�r die Schnittstellendatei f�r Schleupen. + +-- MK // 04.10.2024 +-- 04.10.2024 MK Implementierung von SQL TRANSACTION +-- 14.10.2020 MK Initial + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_SET_EXPORT_FILENAME] + @JOB_GUID INT, -- Mandatory Parameter, to build the file name + @EXPORT_BOOKING_NUMBER VARCHAR(100), + @FILE_NAME VARCHAR(50) OUTPUT +AS + + PRINT '===============================' + PRINT 'PROCEDURE - START [PRCUST_EXPORT_POSTING_DATA_BUILD_FILE_NAME] @ ' + CONVERT(varchar(50),GETDATE(),120) + PRINT 'PARAMETER1 - @JOB_GUID: ' + CONVERT(varchar(50),@JOB_GUID) + PRINT '-------------------------------' + +BEGIN TRY + + SET XACT_ABORT ON; + + BEGIN TRANSACTION + + SET NOCOUNT ON; + + DECLARE + @FILE_NAME_SEPARATOR VARCHAR(1), + @FILE_BASE_NAME VARCHAR(50), + @FILE_RUNNING_NUMBER BIGINT, + @FILE_EXTENSION VARCHAR(4) + + SELECT @FILE_BASE_NAME = [FILE_BASE_NAME], + @FILE_NAME_SEPARATOR = [FILE_NAME_SEPARATOR], + @FILE_RUNNING_NUMBER = [FILE_RUNNING_NUMBER], + @FILE_EXTENSION = [FILE_EXTENSION] + FROM [TBCUST_EXPORT_POSTING_DATA_FILE_CONFIG] + WHERE [JOB_GUID] = @JOB_GUID + + IF (@EXPORT_BOOKING_NUMBER is null) or (LEN(@EXPORT_BOOKING_NUMBER) = 0) + BEGIN + SET @EXPORT_BOOKING_NUMBER = 1 + END + + PRINT '@FILE_BASE_NAME: ' + CONVERT(varchar(50),@FILE_BASE_NAME) + PRINT '@FILE_EXTENSION: ' + CONVERT(varchar(50),@FILE_EXTENSION) + PRINT '@FILE_NAME_SEPARATOR: ' + CONVERT(varchar(50),@FILE_NAME_SEPARATOR) + + SET @FILE_NAME = @FILE_BASE_NAME + @FILE_NAME_SEPARATOR + CONVERT(varchar(1000),@EXPORT_BOOKING_NUMBER) + '.' + @FILE_EXTENSION + PRINT '@FILE_NAME: ' + CONVERT(varchar(50),@FILE_NAME) + PRINT '@EXPORT_BOOKING_NUMBER: ' + CONVERT(varchar(100),@EXPORT_BOOKING_NUMBER) + + -- Set running number to next value... + SET @FILE_RUNNING_NUMBER = @FILE_RUNNING_NUMBER + 1 + PRINT '@FILE_RUNNING_NUMBER(new): ' + CONVERT(varchar(50),@FILE_RUNNING_NUMBER) + + -- ...and update value in TB + UPDATE [TBCUST_EXPORT_POSTING_DATA_FILE_CONFIG] + SET [FILE_RUNNING_NUMBER] = @FILE_RUNNING_NUMBER + WHERE [JOB_GUID] = @JOB_GUID + PRINT 'Set - new - FILE_RUNNING_NUMBER to table!' + + -- Failsafe + SET @FILE_NAME = ISNULL(@FILE_NAME,'undefined.txt') + + PRINT '@FILE_NAME: ' + CONVERT(varchar(50),@FILE_NAME) + + PRINT '-------------------------------' + PRINT 'PROCEDURE - END PRCUST_EXPORT_POSTING_DATA_BUILD_FILE_NAME @ ' + CONVERT(varchar(50),GETDATE(),120) + PRINT '===============================' + + COMMIT TRANSACTION + + --SELECT @FILE_NAME AS [FILE_NAME] + RETURN + +END TRY + +BEGIN CATCH + + ROLLBACK TRANSACTION + + PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(50),ERROR_PROCEDURE()) + + ' - ERROR-MESSAGE: ' + + CONVERT(VARCHAR(500),ERROR_MESSAGE()) + --EXEC [PRCUST_EXPORT_POSTING_DATA_WRITE_LOG] @JOB_GUID, 'File:','Procedure: PRCUST_EXPORT_POSTING_DATA_CREATE_FILE', ERROR_PROCEDURE, ERROR_MESSAGE + RETURN 1 +END CATCH +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_EXPORT_NUMBER].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_EXPORT_NUMBER].sql new file mode 100644 index 0000000..3e075b0 Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_EXPORT_NUMBER].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_QUERY].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_QUERY].sql new file mode 100644 index 0000000..7cec7dd Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_SET_QUERY].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_START_PROFILE_EXECUTION].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_START_PROFILE_EXECUTION].sql new file mode 100644 index 0000000..b9acbb1 Binary files /dev/null and b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_START_PROFILE_EXECUTION].sql differ diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_TEST_DYNAMIC_SQL].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_TEST_DYNAMIC_SQL].sql new file mode 100644 index 0000000..7378897 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_TEST_DYNAMIC_SQL].sql @@ -0,0 +1,67 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDEX_TEST_DYNAMIC_SQL] +-- ================================================================= +-- Central guard for dynamic SQL safety checks +-- +-- Returns: INTEGER; 0 = ok; 0 <> nicht ok +-- ================================================================= +-- Copyright (c) 2025 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: 24.02.2026 / MK +-- Version Date / Editor: 24.02.2026 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 24.02.2026 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_TEST_DYNAMIC_SQL]( + @pQUERY NVARCHAR(MAX), + @pRETURN_STATUS INT, + @pQUERY_NAME NVARCHAR(100) = N'@QUERY' +) +AS +BEGIN TRY + + --================================================-- Set session options --===============================================-- + SET NOCOUNT ON; + ---------------------------------------------------------------------------------------------------------------------------- + + --=========================================-- declare new vars because of parameter sniffing --===========================-- + DECLARE @QUERY NVARCHAR(MAX) = ISNULL(@pQUERY,N''), + @RETURN_STATUS INT = ISNULL(@pRETURN_STATUS,50000), + @QUERY_NAME NVARCHAR(100) = ISNULL(@pQUERY_NAME,N'@QUERY'), + @HAS_UNRESOLVED_PLACEHOLDER BIT = 0, + @HAS_RESTRICTED_SQL BIT = 0, + @RETURN_ERROR_TEXT NVARCHAR(MAX) = N''; + ---------------------------------------------------------------------------------------------------------------------------- + + --=========================================-- validate query content --====================================================-- + SET @HAS_UNRESOLVED_PLACEHOLDER = CASE WHEN PATINDEX('%[%][A-Z_][A-Z0-9_][A-Z0-9_][A-Z0-9_][%]%',UPPER(@QUERY)) > 0 THEN 1 ELSE 0 END; + SET @HAS_RESTRICTED_SQL = CASE WHEN + (PATINDEX('%;--%',UPPER(@QUERY)) > 0) OR + (PATINDEX('%XP_CMDSHELL%',UPPER(@QUERY)) > 0) OR + (PATINDEX('%SP_CONFIGURE%',UPPER(@QUERY)) > 0) OR + (PATINDEX('%ALTER LOGIN%',UPPER(@QUERY)) > 0) OR + (PATINDEX('%CREATE LOGIN%',UPPER(@QUERY)) > 0) OR + (PATINDEX('%DROP DATABASE%',UPPER(@QUERY)) > 0) + THEN 1 ELSE 0 END; + ---------------------------------------------------------------------------------------------------------------------------- + + IF (@HAS_UNRESOLVED_PLACEHOLDER = 1) OR (@HAS_RESTRICTED_SQL = 1) BEGIN + SET @RETURN_ERROR_TEXT = CONCAT('Blocked unsafe query content in ',@QUERY_NAME,'. Detected unresolved placeholder tokens (%TOKEN%) or restricted statements.'); + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + END; + + RETURN 0; + +END TRY BEGIN CATCH + THROW; +END CATCH; +GO \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_FILE].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_FILE].sql new file mode 100644 index 0000000..671caf6 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_FILE].sql @@ -0,0 +1,417 @@ +USE [DD_ECM] +GO + +/****** Object: StoredProcedure [dbo].[PRDEX_WRITE_FILE] Script Date: 14.02.2026 17:23:12 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + +-- TSQL Prozedur welche die bereitsgesammelten Daten abruft und in Folge in eine Datei und ins Archiv schreibt. + +-- MK // 08.10.2024 +-- 08.10.2024 MK Implementierung @EXPORT_HEADER +-- 04.10.2024 MK Implementierung von SQL TRANSACTION und @BATCH_TIMESTAMP für Massenverarbeitung +-- 27.09.2024 MK NOLOCK und LOCAL FAST_FORWARD eingebaut +-- 30.01.2021 MK Initial + + ---- To run the file export in this procedure, it is n to reconfigure the sql server + -- sp_configure 'show advanced options', 1; + -- GO + -- RECONFIGURE WITH OVERRIDE; + -- GO + -- sp_configure 'Ole Automation Procedures', 1; + -- GO + -- RECONFIGURE WITH OVERRIDE; + -- GO + -- EXEC sp_configure 'xp_cmdshell', 1 + -- GO + -- RECONFIGURE WITH OVERRIDE + -- GO + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_WRITE_FILE] + @JOB_GUID INT, + @BATCH_TIMESTAMP VARCHAR(25) + +AS + + PRINT '===============================' + PRINT 'PROCEDURE - START [PRCUST_EXPORT_POSTING_DATA_WRITE_FILE] @ ' + CONVERT(varchar(50),GETDATE(),120) + PRINT 'PARAMETER1 - @JOB_GUID: ' + CONVERT(varchar(50),@JOB_GUID) + PRINT 'PARAMETER2 - @BATCH_TIMESTAMP: ' + CONVERT(varchar(50),@BATCH_TIMESTAMP) + +BEGIN TRY + + BEGIN TRANSACTION + + DECLARE @JOB_NAME VARCHAR(50), + @MANDATOR VARCHAR(50), + @EXPORT_TYPE VARCHAR(50), + @EXPORT_HEADER TINYINT, + @EXPORT_BOOKING_NUMBER VARCHAR(100), + @EXPORT_BOOKING_NUMBER_ARRAY VARCHAR(MAX), + @EXPORT_BOOKING_NUMBER_FIRST_VALUE VARCHAR(50), + @EXPORT_BOOKING_NUMBER_LAST_VALUE VARCHAR(50), + + @OLE_RESULT INT, + @FSO INT, + @GUID BIGINT, + @windreamDocID VARCHAR(MAX), + @windreamDocID_ARRAY VARCHAR(MAX), + @ERROR VARCHAR(1000), + @ERROR_LINE VARCHAR(10), + + @FILE_ID INT, + @FILE_CONTENT NVARCHAR(MAX) = '', + @FILE_CONTENT_HEAD NVARCHAR(MAX), + @FILE_CONTENT_HEAD_QUERY NVARCHAR(MAX), + @FILE_CONTENT_BODY_COUNT INT, + @FILE_CONTENT_BODY_LINE NVARCHAR(MAX), + + @FILE_NAME VARCHAR(50), + @FILE_PATH_TEMP VARCHAR(500), + @FILE_PATH_EXPORT VARCHAR(500), + @FILE_PATH_ARCHIV VARCHAR(500), + @FILE_PATH_ERROR VARCHAR(500), + @FILE_PATH_AND_NAME VARCHAR(600), + @FILE_NAME_SEPARATOR VARCHAR(10) = '-', + @FILE_DATA_SEPARATOR VARCHAR(10) = ';', + + @CMD VARCHAR(1000); + + -- 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); + + + --==========================================-- 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; + ----------------------------------------------------------------------------------------------------------------------------- + + DECLARE @FILE_CONTENT_BODY as TABLE (GUID INT, [EXPORT_BOOKING_NUMBER] VARCHAR(50),FILE_CONTENT_BODY_LINE VARCHAR(max)); + DECLARE @FILE_CONTENT_HEAD_Result as TABLE (ResultText VARCHAR(500)); + + -- Get Job infos + SELECT @JOB_NAME = [JOB_NAME], + @MANDATOR = [MANDANTOR], + @EXPORT_TYPE = [EXPORT_TYPE] + FROM [TBCUST_EXPORT_POSTING_DATA_JOB_CONFIG] (NOLOCK) + WHERE [GUID] = @JOB_GUID; + + -- Get Export config + SELECT @EXPORT_HEADER = [EXPORT_HEADER] + FROM [TBCUST_EXPORT_POSTING_DATA_FILE_CONFIG] (NOLOCK) + WHERE [JOB_GUID] = @JOB_GUID; + + -- Get export file content + INSERT INTO @FILE_CONTENT_BODY ([GUID],[EXPORT_BOOKING_NUMBER],[FILE_CONTENT_BODY_LINE]) + SELECT [T1].[GUID], [T1].[EXPORT_BOOKING_NUMBER], [T1].[FILE_CONTENT] + FROM [TBCUST_EXPORT_POSTING_DATA_FILE_CONTENT] AS [T1], + [TBCUST_EXPORT_POSTING_DATA_FILE_CONFIG] AS [T2] + WHERE [T1].[BATCH_TIMESTAMP] = @BATCH_TIMESTAMP + and [T2].[JOB_GUID] = @JOB_GUID + and [T2].[GUID] = [T1].[FILE_CONFIG_GUID] + ORDER BY [T1].[EXPORT_BOOKING_NUMBER] ASC; + + IF (SELECT COUNT(*) FROM [dbo].[TBCUST_EXPORT_POSTING_DATA_FILE_TEMP] (NOLOCK) WHERE [BATCH_TIMESTAMP] = @BATCH_TIMESTAMP) > 1 BEGIN + + -- Create a temporary table + PRINT 'Creating temp table'; + CREATE TABLE #TempBookingNumbers (EXPORT_BOOKING_NUMBER NVARCHAR(50), DOCID BIGINT); + + -- Insert the required data into the temporary table + PRINT 'Filling temp table'; + INSERT INTO #TempBookingNumbers + SELECT [EXPORT_BOOKING_NUMBER], [DOCID] + FROM [dbo].[TBCUST_EXPORT_POSTING_DATA_FILE_TEMP] (NOLOCK) + WHERE [BATCH_TIMESTAMP] = @BATCH_TIMESTAMP + ORDER BY [EXPORT_BOOKING_NUMBER],[DOCID] ASC; + + -- Get the aggregated values and concat + PRINT 'Retriving from temp table'; + SELECT @windreamDocID = STRING_AGG([DOCID],', '), + @EXPORT_BOOKING_NUMBER_ARRAY = STRING_AGG([EXPORT_BOOKING_NUMBER],', ') + FROM #TempBookingNumbers + + -- Get the first and last values + PRINT 'Getting lowest and hights numbers'; + SELECT @EXPORT_BOOKING_NUMBER_FIRST_VALUE = MIN([EXPORT_BOOKING_NUMBER]), + @EXPORT_BOOKING_NUMBER_LAST_VALUE = MAX([EXPORT_BOOKING_NUMBER]) + FROM #TempBookingNumbers; + + -- Drop the temporary table + PRINT 'Dropping temp table'; + DROP TABLE #TempBookingNumbers; + + PRINT '@EXPORT_BOOKING_NUMBER_ARRAY: ' + @EXPORT_BOOKING_NUMBER_ARRAY; + PRINT '@EXPORT_BOOKING_NUMBER_FIRST_VALUE: ' + convert(varchar,@EXPORT_BOOKING_NUMBER_FIRST_VALUE); + PRINT '@EXPORT_BOOKING_NUMBER_LAST_VALUE: ' + convert(varchar,@EXPORT_BOOKING_NUMBER_LAST_VALUE); + + SET @EXPORT_BOOKING_NUMBER = @EXPORT_BOOKING_NUMBER_FIRST_VALUE + @FILE_NAME_SEPARATOR + @EXPORT_BOOKING_NUMBER_LAST_VALUE; + + END; ELSE BEGIN + -- get windream DocId + SELECT @windreamDocID = [DOCID] + FROM [dbo].[TBCUST_EXPORT_POSTING_DATA_FILE_TEMP] (NOLOCK) + WHERE [BATCH_TIMESTAMP] = @BATCH_TIMESTAMP; + + -- get booking number + SELECT @EXPORT_BOOKING_NUMBER = [EXPORT_BOOKING_NUMBER] + FROM [dbo].[TBCUST_EXPORT_POSTING_DATA_FILE_TEMP] (NOLOCK) + WHERE [BATCH_TIMESTAMP] = @BATCH_TIMESTAMP; + END; + + SET @FILE_CONTENT_BODY_COUNT = (SELECT COUNT(*) FROM @FILE_CONTENT_BODY); + + -- Go on, if there is a contetn to export + IF (@FILE_CONTENT_BODY_COUNT > 0) + + BEGIN + PRINT '@FILE_CONTENT_BODY_COUNT (lines in FILE_CONTENT Table): ' + CONVERT(VARCHAR(50),@FILE_CONTENT_BODY_COUNT) + + -- Textdatei erzeugen + -- Create an instance of the file system object + EXECUTE @OLE_RESULT = sp_OACreate 'Scripting.FileSystemObject',@FSO OUT + -- If Scripting object cannot be created + IF (@OLE_RESULT <> 0) + + BEGIN + SET @ERROR = 'Scripting.FileSystemObject ' + ' Error code: ' + CONVERT(VARCHAR(300),@OLE_RESULT) + SET @ERROR_LINE = CONVERT(VARCHAR(10),@OLE_RESULT) + EXEC [PRCUST_EXPORT_POSTING_DATA_WRITE_JOB_LOG] @JOB_GUID,'File:','Procedure: PRCUST_EXPORT_POSTING_DATA_CREATE_FILE',@ERROR_LINE,@ERROR + END + + -- If Scripting object can be created + ELSE + BEGIN + + -- Open the text file for writing + SELECT @FILE_NAME_SEPARATOR = RTRIM(LTRIM(CONVERT(VARCHAR(10), [FILE_NAME_SEPARATOR]))), + @FILE_DATA_SEPARATOR = RTRIM(LTRIM(CONVERT(VARCHAR(10), [FILE_DATA_SEPARATOR]))), + @FILE_PATH_TEMP = RTRIM(LTRIM(CONVERT(VARCHAR(500),[FILE_PATH_TEMP]))), + @FILE_PATH_EXPORT = RTRIM(LTRIM(CONVERT(VARCHAR(500),[FILE_PATH_EXPORT]))), + @FILE_PATH_ARCHIV = RTRIM(LTRIM(CONVERT(VARCHAR(500),[FILE_PATH_ARCHIV]))), + @FILE_PATH_ERROR = RTRIM(LTRIM(CONVERT(VARCHAR(500),[FILE_PATH_ERROR]))) + FROM [TBCUST_EXPORT_POSTING_DATA_FILE_CONFIG] (NOLOCK) + WHERE [JOB_GUID] = @JOB_GUID + + PRINT ' ' + PRINT '@FILE_PATH_TEMP: ' + @FILE_PATH_TEMP + PRINT '@FILE_PATH_EXPORT: ' + @FILE_PATH_EXPORT + PRINT '@FILE_PATH_ARCHIV: ' + @FILE_PATH_ARCHIV + PRINT '@FILE_PATH_ERROR: ' + @FILE_PATH_ERROR + + -- Build Filename @FILE_NAME = + EXECUTE [dbo].[PRCUST_EXPORT_POSTING_DATA_BUILD_FILE_NAME] @JOB_GUID = @JOB_GUID, @EXPORT_BOOKING_NUMBER = @EXPORT_BOOKING_NUMBER, @FILE_NAME = @FILE_NAME OUTPUT; + PRINT 'Determined @FILE_NAME: ' + @FILE_NAME + + -- Build Filename and path + SET @FILE_PATH_AND_NAME = @FILE_PATH_TEMP + '\' + @FILE_NAME + PRINT 'Determined @FILE_PATH_AND_NAME: ' + @FILE_PATH_AND_NAME + + EXEC @OLE_RESULT = sp_OAMethod @FSO,'OpenTextFile',@FILE_ID OUT, @FILE_PATH_AND_NAME, 2, TRUE, 0 + IF @OLE_RESULT <> 0 + + BEGIN + SET @ERROR = 'OpenTextFile ' + ' Error code: ' + CONVERT(VARCHAR(300),@OLE_RESULT) + SET @ERROR_LINE = CONVERT(VARCHAR(10),@OLE_RESULT) + --EXEC [PRCUST_EXPORT_POSTING_DATA_WRITE_JOB_LOG] 'File:','Procedure: PRCUST_EXPORT_POSTING_DATA_CREATE_FILE',@ERROR_LINE,@ERROR + END + + -- If file could be created, fill the content + ELSE + + BEGIN + -- Set File Head + PRINT ' ' + PRINT '@JOB_NAME: ' + CONVERT(VARCHAR(50),@JOB_NAME) + + -- Write Headline to Var and file if enabled + IF (@EXPORT_HEADER = 0) + BEGIN + PRINT 'Header from [TBCUST_EXPORT_POSTING_DATA_FILE_TEMPLATE] should NOT be exported' + END + ELSE + BEGIN + PRINT 'Header from [TBCUST_EXPORT_POSTING_DATA_FILE_TEMPLATE] should be exported' + + SET @FILE_CONTENT_HEAD_QUERY = [dbo].[FNCUST_EXPORT_POSTING_DATA_BUILD_FILE_HEAD](@JOB_NAME,1) + PRINT '@FILE_CONTENT_HEAD_QUERY (unprocessed): ' + @FILE_CONTENT_HEAD_QUERY + + INSERT INTO @FILE_CONTENT_HEAD_RESULT + EXECUTE sp_executesql @FILE_CONTENT_Head_Query, N'@FILE_DATA_SEPARATOR varchar(1)', @FILE_DATA_SEPARATOR = @FILE_DATA_SEPARATOR; + + -- Get File Head and replace word wrap / line breaks + SET @FILE_CONTENT_HEAD = (SELECT * FROM @FILE_CONTENT_HEAD_RESULT) + SET @FILE_CONTENT_HEAD = REPLACE(@FILE_CONTENT_HEAD,CHAR(13) + CHAR(10),'') + PRINT '@FILE_CONTENT_Head: ' + @FILE_CONTENT_Head + + SET @FILE_CONTENT = @FILE_CONTENT_Head + @FILE_CONTENT + EXECUTE @OLE_RESULT = sp_OAMethod @FILE_ID,'WriteLine',NULL,@FILE_CONTENT + END + + -- prepare cursor to write every content line + DECLARE CURSOR_WRITE_FILE_CONTENT CURSOR + LOCAL FAST_FORWARD FOR + SELECT [FILE_CONTENT_BODY_LINE] + FROM @FILE_CONTENT_BODY + ORDER BY [EXPORT_BOOKING_NUMBER], [GUID] ASC + + OPEN CURSOR_WRITE_FILE_CONTENT + FETCH NEXT FROM CURSOR_WRITE_FILE_CONTENT INTO @FILE_CONTENT_BODY_LINE + WHILE @@FETCH_STATUS = 0 + BEGIN + -- Write the line into the file + PRINT '@FILE_CONTENT_BODY_LINE: ' + @FILE_CONTENT_BODY_LINE + EXECUTE @OLE_RESULT = sp_OAMethod @FILE_ID,'WriteLine',NULL,@FILE_CONTENT_BODY_LINE + + -- Set Var to write into Archiv + SET @FILE_CONTENT = @FILE_CONTENT + CHAR(13) + CHAR(10) + @FILE_CONTENT_BODY_LINE + + FETCH NEXT FROM CURSOR_WRITE_FILE_CONTENT INTO @FILE_CONTENT_BODY_LINE + END + CLOSE CURSOR_WRITE_FILE_CONTENT + DEALLOCATE CURSOR_WRITE_FILE_CONTENT + + -- Remove filesystemobject + EXECUTE @OLE_RESULT = sp_OADestroy @FILE_ID + EXECUTE @OLE_RESULT = sp_OADestroy @FSO + + -- prepare cursor to delete content lines + DECLARE CURSOR_DELETE_FILE_CONTENT CURSOR + LOCAL FAST_FORWARD FOR + SELECT [GUID] + FROM @FILE_CONTENT_BODY + + OPEN CURSOR_DELETE_FILE_CONTENT + FETCH NEXT FROM CURSOR_DELETE_FILE_CONTENT INTO @GUID + WHILE @@FETCH_STATUS = 0 + BEGIN + + DELETE + FROM [TBCUST_EXPORT_POSTING_DATA_FILE_CONTENT] + WHERE [GUID] = @GUID + + FETCH NEXT FROM CURSOR_DELETE_FILE_CONTENT INTO @GUID + END + CLOSE CURSOR_DELETE_FILE_CONTENT + DEALLOCATE CURSOR_DELETE_FILE_CONTENT + + -- Copy file to archiv folder + SET @CMD = 'copy "' + @FILE_PATH_AND_NAME + '" "' + @FILE_PATH_ARCHIV + '"' + EXEC master..xp_cmdshell @CMD, no_output + + -- If copy was successfull, move to output folder + SET @CMD = 'move "' + @FILE_PATH_AND_NAME + '" "' + @FILE_PATH_EXPORT + '"' + EXEC master..xp_cmdshell @CMD, no_output + PRINT 'File: ' + @FILE_PATH_AND_NAME + ' has been created, and moved to: ' + @FILE_PATH_EXPORT + + -- Archive to DB + IF LEN(@EXPORT_BOOKING_NUMBER_ARRAY) > 0 BEGIN + EXECUTE [dbo].[PRCUST_EXPORT_POSTING_DATA_WRITE_FILE_ARCHIV] @JOB_GUID, @windreamDocID, @BATCH_TIMESTAMP, @EXPORT_BOOKING_NUMBER_ARRAY, @FILE_NAME, @FILE_CONTENT; + END; ELSE BEGIN + EXECUTE [dbo].[PRCUST_EXPORT_POSTING_DATA_WRITE_FILE_ARCHIV] @JOB_GUID, @windreamDocID, @BATCH_TIMESTAMP, @EXPORT_BOOKING_NUMBER, @FILE_NAME, @FILE_CONTENT; + END; + PRINT 'Data now written to archive table' + + PRINT '' + PRINT 'PROCEDURE - END [PRCUST_EXPORT_POSTING_DATA_WRITE_FILE] @ ' + CONVERT(varchar(50),GETDATE(),120) + PRINT '===============================' + + COMMIT TRANSACTION + + END + + END + + END + + ELSE + + BEGIN + PRINT 'No rows in data table found!' + PRINT '' + PRINT 'Please check if File was already exported!' + PRINT '1. Check if windream Date [dwdate04] is set? Must be unset or 19700101! (19700101 = 1.1.1970)! ' + PRINT '2. Check if windream Status [szText33] is set to "erledigt"!' + PRINT '3. Check if WF: Zahlungsfreigabe der Geschäftsführung [Vektor_Boolean_06] ist set to true/wahr, ' + PRINT ' have to be false/falsch!' + PRINT '' + + PRINT 'PROCEDURE - END [PRCUST_EXPORT_POSTING_DATA_WRITE_FILE] @ ' + CONVERT(varchar(50),GETDATE(),120) + PRINT '===============================' + END + +END TRY + +BEGIN CATCH + + PRINT 'ERROR IN PROCEDURE: ' + CONVERT(VARCHAR(50),ERROR_PROCEDURE()) + + ' - ERROR-MESSAGE: ' + + CONVERT(VARCHAR(500),ERROR_MESSAGE()) + --EXEC [PRCUST_EXPORT_POSTING_DATA_WRITE_JOB_LOG] @JOB_GUID, 'File:','Procedure: PRCUST_EXPORT_POSTING_DATA_CREATE_FILE'--, CONVERT(VARCHAR(30),ERROR_PROCEDURE()), ERROR_MESSAGE + + ROLLBACK TRANSACTION + + RETURN 1; + +END CATCH +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_LOG].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_LOG].sql new file mode 100644 index 0000000..6eb4cbf --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_LOG].sql @@ -0,0 +1,139 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDEX_WRITE_LOG] +-- ================================================================= +-- Writes log mesages to table [TBDEX_RUN_LOG] +-- +-- Returns: INTEGER; 0 = ok; 0 <> nicht ok +-- ================================================================= +-- Copyright (c) 2025 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: 01.08.2025 / MK +-- Version Date / Editor: 01.08.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 01.08.2025 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_WRITE_LOG]( + @pLOG_LEVEL NVARCHAR(25), + @pPROFILE_ID BIGINT, + @pBATCH_ID NVARCHAR(25), + @pREFERENCE1 NVARCHAR(150), + @pREFERENCE2 NVARCHAR(150) = NULL, + @pREFERENCE3 NVARCHAR(150) = NULL, + @pREFERENCE4 NVARCHAR(150) = NULL, + @pREFERENCE5 NVARCHAR(150) = NULL, + @pRETURN_CODE INT, + @pMESSAGE1 NVARCHAR(max), + @pMESSAGE2 NVARCHAR(max) = NULL, + @pMESSAGE3 NVARCHAR(max) = NULL, + @pMESSAGE4 NVARCHAR(max) = NULL, + @pMESSAGE5 NVARCHAR(max) = NULL, + @pCOMMENT NVARCHAR(250) = NULL, + @pADDED_WHO NVARCHAR(50) = NULL +) +AS +BEGIN TRY + + SET NOCOUNT ON; + SET XACT_ABORT ON; + + -- declare new vars because of parameter sniffing + DECLARE @LOG_LEVEL NVARCHAR(25) = ISNULL(UPPER(@pLOG_LEVEL),'UNKNOWN'), + @PROFILE_ID BIGINT = @pPROFILE_ID, + @BATCH_ID NVARCHAR(25) = @pBATCH_ID, + @REFERENCE1 NVARCHAR(150) = ISNULL(@pREFERENCE1,''), + @REFERENCE2 NVARCHAR(150) = @pREFERENCE2, + @REFERENCE3 NVARCHAR(150) = @pREFERENCE3, + @REFERENCE4 NVARCHAR(150) = @pREFERENCE4, + @REFERENCE5 NVARCHAR(150) = @pREFERENCE5, + @RETURN_CODE INT = ISNULL(@pRETURN_CODE,99999), + @MESSAGE1 NVARCHAR(max) = ISNULL(@pMESSAGE1,''), + @MESSAGE2 NVARCHAR(max) = @pMESSAGE2, + @MESSAGE3 NVARCHAR(max) = @pMESSAGE3, + @MESSAGE4 NVARCHAR(max) = @pMESSAGE4, + @MESSAGE5 NVARCHAR(max) = @pMESSAGE5, + @COMMENT NVARCHAR(250) = @pCOMMENT, + @ADDED_WHO NVARCHAR(50) = ISNULL(@pADDED_WHO,OBJECT_NAME(@@PROCID)); + + -- declare runtime vars + DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ACTIVE_FLAG BIT = 1, + @INACTIVE_FLAG BIT = 0, + @ERROR_MESSAGE NVARCHAR(4000), + @ERROR_STATE INT, + @ERROR_SEVERITY INT, + @RETURN_STATUS NVARCHAR(50) = 0, + @RETURN_STATUS_TEXT NVARCHAR(MAX) = concat('START PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(varchar(50),GETDATE(),120)), + @RETURN_ERROR_TEXT NVARCHAR(MAX) = ''; + + --================================================-- write log if table exists --================================================-- + IF NOT EXISTS (SELECT 1 FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_NAME] = N'TBDEX_RUN_LOG') BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50015; + SET @RETURN_STATUS_TEXT = concat('',''); + SET @RETURN_ERROR_TEXT = concat('Cannot find target table ([TBDEX_RUN_LOG]) for logging!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --=====================================================-- Write log line --======================================================-- + BEGIN TRANSACTION; + + INSERT INTO [TBDEX_RUN_LOG]([LOG_LEVEL], [PROFILE_ID], [BATCH_ID], [REFERENCE1], [REFERENCE2], [REFERENCE3], [REFERENCE4], [REFERENCE5], [RETURN_CODE], [MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [MESSAGE5], [COMMENT], [ADDED_WHO], [ADDED_WHEN]) + VALUES(@LOG_LEVEL, @PROFILE_ID, @BATCH_ID, @REFERENCE1, @REFERENCE2, @REFERENCE3, @REFERENCE4, @REFERENCE5, @RETURN_CODE, @MESSAGE1, @MESSAGE2, @MESSAGE3, @MESSAGE4, @MESSAGE5, @COMMENT, @ADDED_WHO, GETDATE()); + + IF (@@TRANCOUNT > 0) BEGIN + COMMIT TRANSACTION; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END TRY BEGIN CATCH + + --====================================================-- exception / error --====================================================-- + IF (@@TRANCOUNT > 0) BEGIN + ROLLBACK TRANSACTION; + END; + + PRINT 'ERROR: ' + @RETURN_ERROR_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = CASE WHEN @RETURN_STATUS > 50000 THEN @RETURN_STATUS ELSE 50000 END; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE())); + + PRINT 'ERROR IN PROCEDURE: [' + @MY_PROCEDURE_NAME + ']' + char(13) + @RETURN_ERROR_TEXT; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --==================================================-- Write to sql ERRORLOG --==================================================-- + SELECT @ERROR_MESSAGE = ERROR_MESSAGE(), + @ERROR_SEVERITY = ERROR_SEVERITY(), + @ERROR_STATE = ERROR_STATE(); + + RAISERROR (@ERROR_MESSAGE,@ERROR_SEVERITY,@ERROR_STATE); + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END CATCH; +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_OUTPUT].sql b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_OUTPUT].sql new file mode 100644 index 0000000..2a63857 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[PRDEX_WRITE_OUTPUT].sql @@ -0,0 +1,574 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDEX_WRITE_OUTPUT] +-- ================================================================= +-- Inserts data to the Output tables +-- +-- Returns: INTEGER; 0 = ok; 0 <> nicht ok +-- ================================================================= +-- Copyright (c) 2025 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: 01.08.2025 / MK +-- Version Date / Editor: 01.08.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: +-- 01.08.2025 / MK - First Version + +CREATE OR ALTER PROCEDURE [dbo].[PRDEX_WRITE_OUTPUT] + @pPROFILE_ID BIGINT, + @pTEST_MODE BIT, + @pASYNC_MODE BIT, + @pBATCH_ID NVARCHAR(25), + @pBATCH_CREATOR NVARCHAR(50), + @pLANGUAGE NVARCHAR(10), + @pLOG_LEVEL NVARCHAR(25), + @pSTART_QUERY NVARCHAR(MAX), + @pSTART_QUERY_VAR1 NVARCHAR(50), + @pSTART_QUERY_VAR2 NVARCHAR(50), + @pSTART_QUERY_VAR3 NVARCHAR(50), + @pSTART_QUERY_VAR4 NVARCHAR(50), + @pSTART_QUERY_VAR5 NVARCHAR(50), + @pMAIN_QUERY NVARCHAR(MAX), + @pMAIN_QUERY_VAR1 NVARCHAR(50), + @pMAIN_QUERY_VAR2 NVARCHAR(50), + @pMAIN_QUERY_VAR3 NVARCHAR(50), + @pMAIN_QUERY_VAR4 NVARCHAR(50), + @pMAIN_QUERY_VAR5 NVARCHAR(50), + @pEND_QUERY NVARCHAR(MAX), + @pEND_QUERY_VAR1 NVARCHAR(50), + @pEND_QUERY_VAR2 NVARCHAR(50), + @pEND_QUERY_VAR3 NVARCHAR(50), + @pEND_QUERY_VAR4 NVARCHAR(50), + @pEND_QUERY_VAR5 NVARCHAR(50), + @pFORCE BIT, + @pPROFILE_NAME NVARCHAR(50), + @pMANDANTOR NVARCHAR(50), + @pEXPORT_TYPE NVARCHAR(50), + @pEXPORT_NUMBER_SCHEMA NVARCHAR(25), + @pDEFAULT_DATA_SEPARATOR NVARCHAR(10), + @pTBDEX_TMP_TABLE_SCHEMA SYSNAME, + @pTBDEX_TMP_TABLE_NAME SYSNAME, + @pTBDEX_TMP_TABLE_SCHEMA_AND_NAME NVARCHAR(150), + @pTBDEX_TMP_TABLE_DROP_QUERY NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_CREATE_QUERY NVARCHAR(MAX), + @pTBDEX_TMP_TABLE_INSERT_QUERY NVARCHAR(MAX) + +AS +BEGIN TRY + + SET NOCOUNT ON; + + -- declare new vars because of parameter sniffing + DECLARE @PROFILE_ID BIGINT = @pPROFILE_ID, + @TEST_MODE BIT = @pTEST_MODE, + @ASYNC_MODE BIT = @pASYNC_MODE, + @BATCH_ID NVARCHAR(25) = @pBATCH_ID, + @BATCH_CREATOR NVARCHAR(128) = ISNULL(@pBATCH_CREATOR,OBJECT_NAME(@@PROCID)), + @LANGUAGE NVARCHAR(10) = @pLANGUAGE, + @LOG_LEVEL NVARCHAR(25) = UPPER(@pLOG_LEVEL), + @START_QUERY NVARCHAR(MAX) = @pSTART_QUERY, + @START_QUERY_VAR1 NVARCHAR(50) = @pSTART_QUERY_VAR1, + @START_QUERY_VAR2 NVARCHAR(50) = @pSTART_QUERY_VAR2, + @START_QUERY_VAR3 NVARCHAR(50) = @pSTART_QUERY_VAR3, + @START_QUERY_VAR4 NVARCHAR(50) = @pSTART_QUERY_VAR4, + @START_QUERY_VAR5 NVARCHAR(50) = @pSTART_QUERY_VAR5, + @MAIN_QUERY NVARCHAR(MAX) = @pMAIN_QUERY, + @MAIN_QUERY_VAR1 NVARCHAR(50) = @pMAIN_QUERY_VAR1, + @MAIN_QUERY_VAR2 NVARCHAR(50) = @pMAIN_QUERY_VAR2, + @MAIN_QUERY_VAR3 NVARCHAR(50) = @pMAIN_QUERY_VAR3, + @MAIN_QUERY_VAR4 NVARCHAR(50) = @pMAIN_QUERY_VAR4, + @MAIN_QUERY_VAR5 NVARCHAR(50) = @pMAIN_QUERY_VAR5, + @END_QUERY NVARCHAR(MAX) = @pEND_QUERY, + @END_QUERY_VAR1 NVARCHAR(50) = @pEND_QUERY_VAR1, + @END_QUERY_VAR2 NVARCHAR(50) = @pEND_QUERY_VAR2, + @END_QUERY_VAR3 NVARCHAR(50) = @pEND_QUERY_VAR3, + @END_QUERY_VAR4 NVARCHAR(50) = @pEND_QUERY_VAR4, + @END_QUERY_VAR5 NVARCHAR(50) = @pEND_QUERY_VAR5, + @FORCE BIT = @pFORCE, + @PROFILE_NAME NVARCHAR(50) = @pPROFILE_NAME, + @MANDANTOR NVARCHAR(50) = @pMANDANTOR, + @EXPORT_TYPE NVARCHAR(50) = @pEXPORT_TYPE, + @EXPORT_NUMBER_SCHEMA NVARCHAR(25) = @pEXPORT_NUMBER_SCHEMA, + @DEFAULT_DATA_SEPARATOR NVARCHAR(50) = @pDEFAULT_DATA_SEPARATOR, + @TBDEX_TMP_TABLE_SCHEMA SYSNAME = @pTBDEX_TMP_TABLE_SCHEMA, + @TBDEX_TMP_TABLE_NAME SYSNAME = @pTBDEX_TMP_TABLE_NAME, + @TBDEX_TMP_TABLE_SCHEMA_AND_NAME NVARCHAR(150) = @pTBDEX_TMP_TABLE_SCHEMA_AND_NAME, + @TBDEX_TMP_TABLE_COLUMNS NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_COLUMNS, + @TBDEX_TMP_TABLE_DROP_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_DROP_QUERY, + @TBDEX_TMP_TABLE_CREATE_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_CREATE_QUERY, + @TBDEX_TMP_TABLE_INSERT_QUERY NVARCHAR(MAX) = @pTBDEX_TMP_TABLE_INSERT_QUERY; + + DECLARE @vTBDEX_OUT_SOURCE TABLE ( + [PROFILE_ID] BIGINT, + [BATCH_ID] NVARCHAR(25), + [CONTENT] NVARCHAR(MAX), + [REFERENCE1] NVARCHAR(150), + [REFERENCE2] NVARCHAR(150), + [REFERENCE3] NVARCHAR(150), + [REFERENCE4] NVARCHAR(150), + [REFERENCE5] NVARCHAR(150), + [EXTERNAL_REFERENCE1] NVARCHAR(2000), + [EXTERNAL_REFERENCE2] NVARCHAR(2000), + [EXTERNAL_REFERENCE3] NVARCHAR(2000), + [EXTERNAL_REFERENCE4] NVARCHAR(2000), + [EXTERNAL_REFERENCE5] NVARCHAR(2000) + ); + + DECLARE @vTBDEX_OUT_INSERTED TABLE ( + [OUT_ID] BIGINT, + [PROFILE_ID] BIGINT, + [BATCH_ID] NVARCHAR(25), + [REFERENCE1] NVARCHAR(150), + [REFERENCE2] NVARCHAR(150), + [REFERENCE3] NVARCHAR(150), + [REFERENCE4] NVARCHAR(150), + [REFERENCE5] NVARCHAR(150), + [EXTERNAL_REFERENCE1] NVARCHAR(2000), + [EXTERNAL_REFERENCE2] NVARCHAR(2000), + [EXTERNAL_REFERENCE3] NVARCHAR(2000), + [EXTERNAL_REFERENCE4] NVARCHAR(2000), + [EXTERNAL_REFERENCE5] NVARCHAR(2000) + ); + + -- declare runtime vars + DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @ACTIVE_FLAG BIT = 1, + @INACTIVE_FLAG BIT = 0, + @ROW_COUNT1 INT = 0, + @QUERY_KEYWORD NVARCHAR(50) = 'QUERY', + @QUERY_SET_OUTPUT NVARCHAR(MAX) = NULL, + @PLACEHOLDER_NAME NVARCHAR(50) = NULL, + @PLACEHOLDER NVARCHAR(MAX) = NULL, + @PLACEHOLDER_TYPE NVARCHAR(10) = 'CONST', + @REFERENCE1 NVARCHAR(150) = NULL, + @REFERENCE2 NVARCHAR(150) = NULL, + @REFERENCE3 NVARCHAR(150) = NULL, + @REFERENCE4 NVARCHAR(150) = NULL, + @REFERENCE5 NVARCHAR(150) = NULL, + @RETURN_STATUS INT = 0, + @RETURN_STATUS_TEXT NVARCHAR(MAX) = concat('START PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(varchar(50),GETDATE(),120)), + @RETURN_ERROR_TEXT NVARCHAR(MAX) = ''; + + PRINT '===================================================================================================='; + PRINT @RETURN_STATUS_TEXT; + PRINT ''; + PRINT 'PARAMETER01 - @PROFILE_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_ID,'')); + PRINT 'PARAMETER02 - @TEST_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@TEST_MODE,'')); + PRINT 'PARAMETER03 - @ASYNC_MODE: ' + CONVERT(NVARCHAR(50),ISNULL(@ASYNC_MODE,'')); + PRINT 'PARAMETER04 - @BATCH_ID: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_ID,'')); + PRINT 'PARAMETER05 - @BATCH_CREATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@BATCH_CREATOR,'')); + PRINT 'PARAMETER06 - @LANGUAGE: ' + CONVERT(NVARCHAR(50),ISNULL(@LANGUAGE,'')); + PRINT 'PARAMETER07 - @LOG_LEVEL: ' + CONVERT(NVARCHAR(50),ISNULL(@LOG_LEVEL,'')); + PRINT 'PARAMETER08 - @START_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY,'')); + PRINT 'PARAMETER09 - @START_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR1,'')); + PRINT 'PARAMETER10 - @START_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR2,'')); + PRINT 'PARAMETER11 - @START_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR3,'')); + PRINT 'PARAMETER12 - @START_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR4,'')); + PRINT 'PARAMETER13 - @START_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@START_QUERY_VAR5,'')); + PRINT 'PARAMETER14 - @MAIN_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY,'')); + PRINT 'PARAMETER15 - @MAIN_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR1,'')); + PRINT 'PARAMETER16 - @MAIN_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR2,'')); + PRINT 'PARAMETER17 - @MAIN_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR3,'')); + PRINT 'PARAMETER18 - @MAIN_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR4,'')); + PRINT 'PARAMETER19 - @MAIN_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@MAIN_QUERY_VAR5,'')); + PRINT 'PARAMETER20 - @END_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY,'')); + PRINT 'PARAMETER21 - @END_QUERY_VAR1: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR1,'')); + PRINT 'PARAMETER22 - @END_QUERY_VAR2: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR2,'')); + PRINT 'PARAMETER23 - @END_QUERY_VAR3: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR3,'')); + PRINT 'PARAMETER24 - @END_QUERY_VAR4: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR4,'')); + PRINT 'PARAMETER25 - @END_QUERY_VAR5: ' + CONVERT(NVARCHAR(50),ISNULL(@END_QUERY_VAR5,'')); + PRINT 'PARAMETER26 - @FORCE: ' + CONVERT(NVARCHAR(50),ISNULL(@FORCE,'')); + PRINT 'PARAMETER27 - @PROFILE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@PROFILE_NAME,'')); + PRINT 'PARAMETER28 - @MANDANTOR: ' + CONVERT(NVARCHAR(50),ISNULL(@MANDANTOR,'')); + PRINT 'PARAMETER29 - @EXPORT_TYPE: ' + CONVERT(NVARCHAR(50),ISNULL(@EXPORT_TYPE,'')); + PRINT 'PARAMETER30 - @DEFAULT_DATA_SEPARATOR: ' + CONVERT(NVARCHAR(50),ISNULL(@DEFAULT_DATA_SEPARATOR,'')); + PRINT 'PARAMETER31 - @TBDEX_TMP_TABLE_SCHEMA: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_SCHEMA,'')); + PRINT 'PARAMETER32 - @TBDEX_TMP_TABLE_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_NAME,'')); + PRINT 'PARAMETER33 - @TBDEX_TMP_TABLE_SCHEMA_AND_NAME: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_SCHEMA_AND_NAME,'')); + PRINT 'PARAMETER34 - @TBDEX_TMP_TABLE_COLUMNS: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_COLUMNS,'')); + PRINT 'PARAMETER35 - @TBDEX_TMP_TABLE_DROP_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_DROP_QUERY,'')); + PRINT 'PARAMETER36 - @TBDEX_TMP_TABLE_CREATE_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_CREATE_QUERY,'')); + PRINT 'PARAMETER37 - @TBDEX_TMP_TABLE_INSERT_QUERY: ' + CONVERT(NVARCHAR(50),ISNULL(@TBDEX_TMP_TABLE_INSERT_QUERY,'')); + PRINT ''; + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --====================================================-- Get end sql query --====================================================-- + IF (((UPPER(@END_QUERY) LIKE 'SELECT%') OR (UPPER(@END_QUERY) LIKE '%SELECT%')) AND (UPPER(@END_QUERY) LIKE '%FROM%')) BEGIN + + SET @QUERY_SET_OUTPUT = LTRIM(RTRIM(@END_QUERY)); + + END; ELSE IF ((SELECT count(*) + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG + AND LTRIM(RTRIM([PLACEHOLDER_NAME])) = @END_QUERY AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @QUERY_KEYWORD) >= 1) BEGIN + + SET @QUERY_SET_OUTPUT = (SELECT TOP 1 LTRIM(RTRIM([PLACEHOLDER])) + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (@PROFILE_ID,0) AND [ACTIVE] = @ACTIVE_FLAG + AND LTRIM(RTRIM([PLACEHOLDER_NAME])) = @END_QUERY AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @QUERY_KEYWORD + ORDER BY [PROFILE_ID] ASC,[GUID] DESC); + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --=================================================-- Check first sql query --===================================================-- + IF (LEN(@QUERY_SET_OUTPUT) < 15) BEGIN + + --====================================================-- exception / error --====================================================-- + SET @RETURN_STATUS = 50001; + SET @RETURN_STATUS_TEXT = concat('Wrong call or configuraton!',''); + SET @RETURN_ERROR_TEXT = concat('Found no valid querys (query needs to be 15 chars or more)!',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Found "QUERY_SET_OUTPUT" query: ',char(13),@QUERY_SET_OUTPUT); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --==============================================-- Get data separator for cols --===============================================-- + IF (LEN(@DEFAULT_DATA_SEPARATOR) > 0) BEGIN + + SET @TBDEX_TMP_TABLE_COLUMNS = REPLACE(@TBDEX_TMP_TABLE_COLUMNS,',',@DEFAULT_DATA_SEPARATOR) + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('The @TBDEX_TMP_TABLE_COLUMNS variable has been modified by the @DEFAULT_DATA_SEPARATOR variable: ',@TBDEX_TMP_TABLE_COLUMNS); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; ELSE BEGIN + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('The @TBDEX_TMP_TABLE_COLUMNS variable has NOT been modified by the @DEFAULT_DATA_SEPARATOR variable: ',@TBDEX_TMP_TABLE_COLUMNS); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --==================================================-- Handle placeholders --==================================================-- + PRINT 'Replacing placeholders...'; + + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%PROFILE_ID%',ISNULL(@PROFILE_ID,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%TEST_MODE%',ISNULL(@TEST_MODE,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%ASYNC_MODE%',ISNULL(@ASYNC_MODE,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%BATCH_ID%',ISNULL(@BATCH_ID,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%BATCH_CREATOR%',ISNULL(@BATCH_CREATOR,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%LANGUAGE%',ISNULL(@LANGUAGE,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%LOG_LEVEL%',ISNULL(@LOG_LEVEL,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%START_QUERY%',ISNULL(@START_QUERY,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%START_QUERY_VAR1%',ISNULL(@START_QUERY_VAR1,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%START_QUERY_VAR2%',ISNULL(@START_QUERY_VAR2,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%START_QUERY_VAR3%',ISNULL(@START_QUERY_VAR3,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%START_QUERY_VAR4%',ISNULL(@START_QUERY_VAR4,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%START_QUERY_VAR5%',ISNULL(@START_QUERY_VAR5,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MAIN_QUERY%',ISNULL(@MAIN_QUERY,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MAIN_QUERY_VAR1%',ISNULL(@MAIN_QUERY_VAR1,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MAIN_QUERY_VAR2%',ISNULL(@MAIN_QUERY_VAR2,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MAIN_QUERY_VAR3%',ISNULL(@MAIN_QUERY_VAR3,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MAIN_QUERY_VAR4%',ISNULL(@MAIN_QUERY_VAR4,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MAIN_QUERY_VAR5%',ISNULL(@MAIN_QUERY_VAR5,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%END_QUERY%',ISNULL(@END_QUERY,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%END_QUERY_VAR1%',ISNULL(@END_QUERY_VAR1,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%END_QUERY_VAR2%',ISNULL(@END_QUERY_VAR2,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%END_QUERY_VAR3%',ISNULL(@END_QUERY_VAR3,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%END_QUERY_VAR4%',ISNULL(@END_QUERY_VAR4,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%END_QUERY_VAR5%',ISNULL(@END_QUERY_VAR5,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%FORCE%',ISNULL(@FORCE,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MY_PROCEDURE_NAME%',ISNULL(@MY_PROCEDURE_NAME,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%PROFILE_NAME%',ISNULL(@PROFILE_NAME,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%MANDANTOR%',ISNULL(@MANDANTOR,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%EXPORT_TYPE%',ISNULL(@EXPORT_TYPE,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%DEFAULT_DATA_SEPARATOR%',ISNULL(@DEFAULT_DATA_SEPARATOR,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%REFERENCE1%',ISNULL(@REFERENCE1,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%REFERENCE2%',ISNULL(@REFERENCE2,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%REFERENCE3%',ISNULL(@REFERENCE3,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%REFERENCE4%',ISNULL(@REFERENCE4,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%REFERENCE5%',ISNULL(@REFERENCE5,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%TBDEX_TMP_TABLE_SCHEMA%',ISNULL(@TBDEX_TMP_TABLE_SCHEMA,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%TBDEX_TMP_TABLE_NAME%',ISNULL(@TBDEX_TMP_TABLE_NAME,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%TBDEX_TMP_TABLE_COLUMNS%',ISNULL(@TBDEX_TMP_TABLE_COLUMNS,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%TBDEX_TMP_TABLE_DROP_QUERY%',ISNULL(@TBDEX_TMP_TABLE_DROP_QUERY,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%TBDEX_TMP_TABLE_CREATE_QUERY%',ISNULL(@TBDEX_TMP_TABLE_CREATE_QUERY,'')); + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,'%TBDEX_TMP_TABLE_INSERT_QUERY%',ISNULL(@TBDEX_TMP_TABLE_INSERT_QUERY,'')); + + DECLARE CURSOR_PLACEHOLDER CURSOR + LOCAL FAST_FORWARD FOR + SELECT [PLACEHOLDER_NAME] as 'Placeholder_Name', [PLACEHOLDER] as 'Placeholder' + FROM [TBDEX_CFG_RESOURCES] + WHERE [PROFILE_ID] IN (0,@PROFILE_ID) AND [ACTIVE] = @ACTIVE_FLAG AND LTRIM(RTRIM([PLACEHOLDER_TYPE])) = @PLACEHOLDER_TYPE + ORDER BY [SEQUENCE] ASC; + + OPEN CURSOR_PLACEHOLDER + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @QUERY_SET_OUTPUT = REPLACE(@QUERY_SET_OUTPUT,concat('%',@PLACEHOLDER_NAME,'%'),ISNULL(@PLACEHOLDER,'')); + + FETCH NEXT FROM CURSOR_PLACEHOLDER INTO @PLACEHOLDER_NAME,@PLACEHOLDER; + END + CLOSE CURSOR_PLACEHOLDER; + DEALLOCATE CURSOR_PLACEHOLDER; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('Prepared "@QUERY_SET_OUTPUT" (length: ',LEN(@QUERY_SET_OUTPUT),', preview: ',LEFT(@QUERY_SET_OUTPUT,500),')'); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT 'INFO: ' + @RETURN_STATUS_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --======================================================-- Safety checks --======================================================-- + EXEC [PRDEX_TEST_DYNAMIC_SQL] @pQUERY = @QUERY_SET_OUTPUT, + @pRETURN_STATUS = 50054, + @pQUERY_NAME = N'@QUERY_SET_OUTPUT'; + ----------------------------------------------------------------------------------------------------------------------------------- + + + --==================================================-- run insert statement --===================================================-- + INSERT INTO @vTBDEX_OUT_SOURCE ([PROFILE_ID],[BATCH_ID],[CONTENT],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5],[EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5]) + EXEC sp_executesql @QUERY_SET_OUTPUT; + ----------------------------------------------------------------------------------------------------------------------------------- + + BEGIN TRANSACTION; + + MERGE [TBDEX_OUT] AS [T] + USING ( + SELECT [SRC].[PROFILE_ID], + [SRC].[BATCH_ID], + [SRC].[CONTENT], + [SRC].[REFERENCE1], + [SRC].[REFERENCE2], + [SRC].[REFERENCE3], + [SRC].[REFERENCE4], + [SRC].[REFERENCE5], + [SRC].[EXTERNAL_REFERENCE1], + [SRC].[EXTERNAL_REFERENCE2], + [SRC].[EXTERNAL_REFERENCE3], + [SRC].[EXTERNAL_REFERENCE4], + [SRC].[EXTERNAL_REFERENCE5] + FROM @vTBDEX_OUT_SOURCE AS [SRC] + ) AS [S] + ON 1 = 0 + WHEN NOT MATCHED THEN + INSERT ([PROFILE_ID],[BATCH_ID],[CONTENT],[ADDED_WHO],[ADDED_WHEN]) + VALUES ([S].[PROFILE_ID],[S].[BATCH_ID],[S].[CONTENT],@BATCH_CREATOR,GETDATE()) + OUTPUT INSERTED.[GUID], + [S].[PROFILE_ID], + [S].[BATCH_ID], + [S].[REFERENCE1], + [S].[REFERENCE2], + [S].[REFERENCE3], + [S].[REFERENCE4], + [S].[REFERENCE5], + [S].[EXTERNAL_REFERENCE1], + [S].[EXTERNAL_REFERENCE2], + [S].[EXTERNAL_REFERENCE3], + [S].[EXTERNAL_REFERENCE4], + [S].[EXTERNAL_REFERENCE5] + INTO @vTBDEX_OUT_INSERTED ([OUT_ID],[PROFILE_ID],[BATCH_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5],[EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5]); + + IF EXISTS ( + SELECT 1 + FROM @vTBDEX_OUT_INSERTED AS [OI] + OUTER APPLY ( + SELECT TOP 1 [TPR].[EXPORT_NUMBER] + FROM [TBDEX_TMP_PROCESS_REFERENCES] AS [TPR] WITH (SNAPSHOT) + WHERE [TPR].[PROFILE_ID] = [OI].[PROFILE_ID] + AND [TPR].[BATCH_ID] = [OI].[BATCH_ID] + AND ISNULL([TPR].[REFERENCE1],'') = ISNULL([OI].[REFERENCE1],'') + AND ISNULL([TPR].[REFERENCE2],'') = ISNULL([OI].[REFERENCE2],'') + AND ISNULL([TPR].[REFERENCE3],'') = ISNULL([OI].[REFERENCE3],'') + AND ISNULL([TPR].[REFERENCE4],'') = ISNULL([OI].[REFERENCE4],'') + AND ISNULL([TPR].[REFERENCE5],'') = ISNULL([OI].[REFERENCE5],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE1],'') = ISNULL([OI].[EXTERNAL_REFERENCE1],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE2],'') = ISNULL([OI].[EXTERNAL_REFERENCE2],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE3],'') = ISNULL([OI].[EXTERNAL_REFERENCE3],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE4],'') = ISNULL([OI].[EXTERNAL_REFERENCE4],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE5],'') = ISNULL([OI].[EXTERNAL_REFERENCE5],'') + AND [TPR].[ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME) + ORDER BY [TPR].[GUID] DESC + ) AS [MAP] + WHERE [MAP].[EXPORT_NUMBER] IS NULL + ) BEGIN + + SET @RETURN_STATUS = 50058; + SET @RETURN_STATUS_TEXT = concat('Missing EXPORT_NUMBER mapping for output references!',''); + SET @RETURN_ERROR_TEXT = concat('Could not resolve [TBDEX_TMP_PROCESS_REFERENCES].[EXPORT_NUMBER] for at least one output row.',''); + + THROW @RETURN_STATUS,@RETURN_ERROR_TEXT,1; + END; + + INSERT INTO [TBDEX_OUT_REFERENCES] ([OUT_ID],[REFERENCE1],[REFERENCE2],[REFERENCE3],[REFERENCE4],[REFERENCE5],[EXTERNAL_REFERENCE1],[EXTERNAL_REFERENCE2],[EXTERNAL_REFERENCE3],[EXTERNAL_REFERENCE4],[EXTERNAL_REFERENCE5],[EXPORT_NUMBER],[ADDED_WHO],[ADDED_WHEN]) + SELECT [OI].[OUT_ID], + ISNULL([OI].[REFERENCE1],''), + [OI].[REFERENCE2], + [OI].[REFERENCE3], + [OI].[REFERENCE4], + [OI].[REFERENCE5], + LEFT([OI].[EXTERNAL_REFERENCE1],255), + LEFT([OI].[EXTERNAL_REFERENCE2],255), + LEFT([OI].[EXTERNAL_REFERENCE3],255), + LEFT([OI].[EXTERNAL_REFERENCE4],255), + LEFT([OI].[EXTERNAL_REFERENCE5],255), + [MAP].[EXPORT_NUMBER], + @BATCH_CREATOR, + GETDATE() + FROM @vTBDEX_OUT_INSERTED AS [OI] + CROSS APPLY ( + SELECT TOP 1 [TPR].[EXPORT_NUMBER] + FROM [TBDEX_TMP_PROCESS_REFERENCES] AS [TPR] WITH (SNAPSHOT) + WHERE [TPR].[PROFILE_ID] = [OI].[PROFILE_ID] + AND [TPR].[BATCH_ID] = [OI].[BATCH_ID] + AND ISNULL([TPR].[REFERENCE1],'') = ISNULL([OI].[REFERENCE1],'') + AND ISNULL([TPR].[REFERENCE2],'') = ISNULL([OI].[REFERENCE2],'') + AND ISNULL([TPR].[REFERENCE3],'') = ISNULL([OI].[REFERENCE3],'') + AND ISNULL([TPR].[REFERENCE4],'') = ISNULL([OI].[REFERENCE4],'') + AND ISNULL([TPR].[REFERENCE5],'') = ISNULL([OI].[REFERENCE5],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE1],'') = ISNULL([OI].[EXTERNAL_REFERENCE1],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE2],'') = ISNULL([OI].[EXTERNAL_REFERENCE2],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE3],'') = ISNULL([OI].[EXTERNAL_REFERENCE3],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE4],'') = ISNULL([OI].[EXTERNAL_REFERENCE4],'') + AND ISNULL([TPR].[EXTERNAL_REFERENCE5],'') = ISNULL([OI].[EXTERNAL_REFERENCE5],'') + AND [TPR].[ADDED_WHO] IN (@BATCH_CREATOR,@MY_PROCEDURE_NAME) + ORDER BY [TPR].[GUID] DESC + ) AS [MAP]; + + COMMIT TRANSACTION; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = 0; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('',''); + + PRINT ''; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'INFO', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END TRY BEGIN CATCH + + --====================================================-- exception / error --====================================================-- + IF (@@TRANCOUNT > 0) BEGIN + ROLLBACK TRANSACTION; + END; + + PRINT 'ERROR: ' + @RETURN_ERROR_TEXT; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + --======================================================-- Output result --======================================================-- + SET @RETURN_STATUS = CASE WHEN @RETURN_STATUS > 50000 THEN @RETURN_STATUS ELSE 50000 END; + SET @RETURN_STATUS_TEXT = concat('END PROCEDURE [',@MY_PROCEDURE_NAME,'] @ ',CONVERT(NVARCHAR(50),GETDATE(),120)); + SET @RETURN_ERROR_TEXT = concat('ERROR MESSAGE: ',CONVERT(NVARCHAR(500),ERROR_MESSAGE())); + + PRINT 'ERROR IN PROCEDURE: [' + @MY_PROCEDURE_NAME + ']' + char(13) + @RETURN_ERROR_TEXT; + PRINT @RETURN_STATUS_TEXT; + PRINT '===================================================================================================='; + ----------------------------------------------------------------------------------------------------------------------------------- + + --===================================================-- Log result to table --===================================================-- + IF (@LOG_LEVEL in ('INFO','WARN','ERROR')) BEGIN + EXEC [PRDEX_WRITE_LOG] @pLOG_LEVEL = N'ERROR', @pPROFILE_ID = @PROFILE_ID, @pBATCH_ID = @BATCH_ID, + @pREFERENCE1 = @REFERENCE1, @pREFERENCE2 = @REFERENCE2, @pREFERENCE3 = @REFERENCE3, + @pREFERENCE4 = @REFERENCE4, @pREFERENCE5 = @REFERENCE5, @pRETURN_CODE = @RETURN_STATUS, + @pMESSAGE1 = @RETURN_STATUS_TEXT, @pMESSAGE2 = @RETURN_ERROR_TEXT, @pADDED_WHO = @MY_PROCEDURE_NAME; + END; + ----------------------------------------------------------------------------------------------------------------------------------- + + RETURN @RETURN_STATUS; + +END CATCH; +GO \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[START-DEX].sql b/current/[DD_ECM]-Database/DEX_SQL/[START-DEX].sql new file mode 100644 index 0000000..50c597e --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[START-DEX].sql @@ -0,0 +1,129 @@ +USE [DD_ECM] +GO + +DECLARE @return_value int +EXEC @return_value = [dbo].[PRDEX_START_PROFILE_EXECUTION] + @pPROFILE_ID = 2, + @pTEST_MODE = 0, + @pASYNC_MODE = 0, + @pBATCH_ID = N'4712', + @pBATCH_CREATOR = N'meSamB', + @pLANGUAGE = N'de-de', + @pLOG_LEVEL = N'info', + @pSTART_QUERY_VAR1 = 'erledigt' + +SELECT 'Return Value' = @return_value +GO + +SELECT * FROM [DD_ECM].[dbo].[TBDEX_RUN_LOG] + +-- ========================================= +-- Validation: OUT <-> OUT_REFERENCES mapping +-- ========================================= + +-- 1) Letzte 50 Outputs inkl. Anzahl referenzzeilen +SELECT TOP (50) + [O].[GUID] AS [OUT_ID], + [O].[PROFILE_ID], + [O].[BATCH_ID], + [O].[ADDED_WHEN], + COUNT([R].[GUID]) AS [REFERENCE_ROWS] +FROM [DD_ECM].[dbo].[TBDEX_OUT] AS [O] +LEFT JOIN [DD_ECM].[dbo].[TBDEX_OUT_REFERENCES] AS [R] + ON [R].[OUT_ID] = [O].[GUID] +GROUP BY [O].[GUID],[O].[PROFILE_ID],[O].[BATCH_ID],[O].[ADDED_WHEN] +ORDER BY [O].[GUID] DESC; + +-- 2) Outputs ohne Referenzzeile (sollte 0 Zeilen liefern) +SELECT + [O].[GUID] AS [OUT_ID], + [O].[PROFILE_ID], + [O].[BATCH_ID], + [O].[ADDED_WHEN] +FROM [DD_ECM].[dbo].[TBDEX_OUT] AS [O] +LEFT JOIN [DD_ECM].[dbo].[TBDEX_OUT_REFERENCES] AS [R] + ON [R].[OUT_ID] = [O].[GUID] +WHERE [R].[GUID] IS NULL +ORDER BY [O].[GUID] DESC; + +-- 3) Referenzzeilen ohne Parent (sollte 0 Zeilen liefern) +SELECT + [R].[GUID] AS [REFERENCE_ID], + [R].[OUT_ID], + [R].[EXPORT_NUMBER], + [R].[ADDED_WHEN] +FROM [DD_ECM].[dbo].[TBDEX_OUT_REFERENCES] AS [R] +LEFT JOIN [DD_ECM].[dbo].[TBDEX_OUT] AS [O] + ON [O].[GUID] = [R].[OUT_ID] +WHERE [O].[GUID] IS NULL +ORDER BY [R].[GUID] DESC; +-- delete FROM [DD_ECM].[dbo].[TBDEX_RUN_LOG] + + +/**** + + SELECT DISTINCT %PROFILE_ID% as 'PROFILE_ID', + %BATCH_ID% as 'BATCH_ID', + [BA].[dwDocID] as 'REFERENCE1', + RIGHT(LEFT(ISNULL([BA].[dwDate09],RIGHT(year(getdate()),2)),4),2) as 'REFERENCE2', + NULL as 'REFERENCE3', + NULL as 'REFERENCE4', + NULL as 'REFERENCE5', + [dbo].[FNDD_GET_WINDREAM_FILE_PATH]([BA].[dwDocID],1) as 'EXTERNAL_REFERENCE1', + NULL as 'EXTERNAL_REFERENCE2', + NULL as 'EXTERNAL_REFERENCE3', + NULL as 'EXTERNAL_REFERENCE4', + NULL as 'EXTERNAL_REFERENCE5', + %TEST_MODE% as 'TEST_MODE', + %ASYNC_MODE% as 'ASYNC_MODE', + NULL as 'COMMENT', + '%BATCH_CREATOR%' as 'ADDED_WHO', + GETDATE() as 'ADDED_WHEN' +FROM %CONST_WD_DB%.[BaseAttributes] as [BA] (NOLOCK) +INNER JOIN %CONST_WD_DB%.[Vector] as [V] (NOLOCK) ON [BA].[dwDocID] = [V].[dwDocID] +WHERE [BA].[dwDocID] is not null + and [BA].[dwCatalogID] = 1 + and [BA].[szText37] in ('Eingangsrechnung-WF','Eingangsgutschrift-WF') -- Dokumentart + and [BA].[szText32] = 'Bestätigt' -- Status-Detail + and [BA].[szText33] = '%START_QUERY_VAR1%' -- Status + and ([BA].[dwDate04] is null or [BA].[dwDate04] = 19700101) -- Export-Datum + and LEFT([BA].[dwDate09],4) in (year(GETDATE()),year(GETDATE())-1,year(GETDATE())+1) -- Beleg-Datum + and ([BA].[dwInteger20] is NULL or [BA].[dwInteger20] = 0) -- Buchungsnummer + and (SELECT COUNT(*) FROM %CONST_WD_DB%.[Vector] as [V] (NOLOCK) WHERE [BA].[dwDocID] = [V].[dwDocID] and [V].[dwAttrID] = %CONST_WD_VECTOR_ID3% and [V].[blValue] = 1) > 0 --WF: Zahlungsfreigabe der Geschäftsführung + and (SELECT COUNT(*) FROM %CONST_WD_DB%.[Vector] as [V] (NOLOCK) WHERE [BA].[dwDocID] = [V].[dwDocID] and [V].[dwAttrID] = %CONST_WD_VECTOR_ID4% and [V].[blValue] = 1) = 0 --WF: Manuelle Schleupen Übergabe +ORDER BY [BA].[dwDocID] ASC; + + + SELECT %PROFILE_ID% as [PROFILE_ID], + %BATCH_ID% as [BATCH_ID], + 'EXPORT_BOOKING_NUMBER' as [Belegnummer (X)], + FORMAT(CONVERT(DATE,CONVERT(VARCHAR(8),LEFT([dwDate09],8)),104),'dd.MM.yyyy') as [Belegdatum (X)], + FORMAT(CONVERT(DATE,CONVERT(VARCHAR(8),LEFT([dwDate07],8)),104),'dd.MM.yyyy') as [Valutadatum], + 'K' as [Kontoart (X)], + REPLACE(REPLACE([szText38],';',''),' ','') as [Kontonummer (X)], + NULL as [Gegenkontoart (X)], + NULL as [Gegenkonto], + NULL as [Zusatzkontoart], + NULL as [Zusatzkonto], + TRY_CONVERT(float,[lfFloat12]) as [Betrag], + 'IncomeExpensesFlag' as [S/H-Kennzeichen], + '' as [Steuerschlüssel], + REPLACE(REPLACE([szText02],';',''),CHAR(13) + CHAR(10),'') as [Buchungstext], + NULL as [Zahlungsträgerhinweis], + NULL as [Geschäftsbereich], + FORMAT(CONVERT(DATE,CONVERT(VARCHAR(8),LEFT([decCreationTime],8)),104),'dd.MM.yyyy') as [externes Rechnungsdatum], + REPLACE([szText19],';','') as [externe Rechnungsnummer], + NULL as [Rechnungseinheit], + FORMAT(CONVERT(DATE,CONVERT(VARCHAR(8),LEFT([dwDate06],8)),104),'dd.MM.yyyy') as [Fälligkeitsdatum], + NULL as [Skontotage 1], + NULL as [Skonto Prozent 1], + NULL as [Skontotage 2], + NULL as [Skonto Prozent 2], + [dwInteger22] as [Nettotage] + FROM [windreamDB].[dbo].[BaseAttributes] (NOLOCK) + WHERE [dwDocID] = '%REFERENCE1%' + and [szText33] = 'in Arbeit'; + + + +****/ \ No newline at end of file diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_DB].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_DB].sql new file mode 100644 index 0000000..22ce97a --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_DB].sql @@ -0,0 +1,46 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_CFG_OUT_DB] Script Date: 07.12.2025 23:10:46 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_CFG_OUT_DB]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [ACTIVE] [bit] NOT NULL, + [CONTENT_TYPE] [nvarchar](500) NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_CFG_OUT_DB] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_DB] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_DB_ACTIVE] DEFAULT ((0)) FOR [ACTIVE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_DB] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_DB_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_DB] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_DB_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_DB] WITH CHECK ADD CONSTRAINT [FK_TBDEX_CFG_OUT_DB_TBDEX_CFG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_DB] CHECK CONSTRAINT [FK_TBDEX_CFG_OUT_DB_TBDEX_CFG_PROFILE] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link PROFILE_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_CFG_OUT_DB', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_CFG_OUT_DB_TBDEX_CFG_PROFILE' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_FILE].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_FILE].sql new file mode 100644 index 0000000..44e29cc --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_FILE].sql @@ -0,0 +1,90 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_CFG_OUT_FILE] Script Date: 07.12.2025 23:12:58 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_CFG_OUT_FILE]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [ACTIVE] [bit] NOT NULL, + [EXPORT_HEADER] [bit] NOT NULL, + [FILE_TYPE] [nvarchar](50) NOT NULL, + [FILE_NAME_SEPARATOR] [nvarchar](50) NOT NULL, + [FILE_DATA_SEPARATOR] [nvarchar](50) NOT NULL, + [FILE_BASE_NAME] [nvarchar](50) NOT NULL, + [FILE_COUNTER_SCHEMA] [nvarchar](50) NOT NULL, + [FILE_COUNTER] [bigint] NOT NULL, + [FILE_EXTENSION] [nvarchar](5) NOT NULL, + [FILE_PATH_TEMP] [nvarchar](255) NOT NULL, + [FILE_PATH_EXPORT] [nvarchar](255) NOT NULL, + [FILE_PATH_ARCHIV] [nvarchar](255) NOT NULL, + [FILE_PATH_ERROR] [nvarchar](255) NOT NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_CFG_OUT_FILE] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_ACTIVE] DEFAULT ((0)) FOR [ACTIVE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_EXPORT_HEADER] DEFAULT ((0)) FOR [EXPORT_HEADER] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_NAME_SEPARATOR] DEFAULT ('_') FOR [FILE_NAME_SEPARATOR] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_DATA_SEPARATOR] DEFAULT (';') FOR [FILE_DATA_SEPARATOR] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_BASE_NAME] DEFAULT ('ExportFile_') FOR [FILE_BASE_NAME] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_COUNTER_SCHEMA] DEFAULT ('YY00000') FOR [FILE_COUNTER_SCHEMA] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_COUNTER] DEFAULT ((0)) FOR [FILE_COUNTER] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_EXTENSION] DEFAULT ('CSV') FOR [FILE_EXTENSION] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_PATH_TEMP] DEFAULT ('E:\FileProcessing\Temp\File\') FOR [FILE_PATH_TEMP] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_PATH_EXPORT] DEFAULT ('E:\FileProcessing\Output\File\') FOR [FILE_PATH_EXPORT] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_PATH_ARCHIV] DEFAULT ('E:\FileProcessing\Archive\File\') FOR [FILE_PATH_ARCHIV] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_PATH_ERROR] DEFAULT ('E:\FileProcessing\Error\File\') FOR [FILE_PATH_ERROR] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_FILE_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] WITH CHECK ADD CONSTRAINT [FK_TBDEX_CFG_OUT_FILE_TBDEX_CFG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_FILE] CHECK CONSTRAINT [FK_TBDEX_CFG_OUT_FILE_TBDEX_CFG_PROFILE] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link PROFILE_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_CFG_OUT_FILE', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_CFG_OUT_FILE_TBDEX_CFG_PROFILE' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_STRUCTURE].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_STRUCTURE].sql new file mode 100644 index 0000000..ddbacfd --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_OUT_STRUCTURE].sql @@ -0,0 +1,67 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_CFG_OUT_STRUCTURE] Script Date: 07.12.2025 23:14:25 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [ACTIVE] [bit] NOT NULL, + [DESCRIPTION] [nvarchar](500) NULL, + [EXPORT_TYPE] [nvarchar](50) NOT NULL, + [SEQUENCE] [tinyint] NOT NULL, + [PATH_OR_COLUMN] [nvarchar](500) NOT NULL, + [DATA_TYPE] [nvarchar](50) NOT NULL, + [LANGUAGE] [nvarchar](10) NOT NULL, + [COMMENT] [nvarchar](250) NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_CFG_OUT_STRUCTURE] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_STRUCTURE_ACTIVE] DEFAULT ((0)) FOR [ACTIVE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_STRUCTURE_LEVEL_OR_COLUMN_NUMBER] DEFAULT ((0)) FOR [SEQUENCE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_STRUCTURE_DATA_TYPE] DEFAULT ('NVARCHAR(100)') FOR [DATA_TYPE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_STRUCTURE_LANGUAGE] DEFAULT ('de_DE') FOR [LANGUAGE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_STRUCTURE_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] ADD CONSTRAINT [DF_TBDEX_CFG_OUT_STRUCTURE_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] WITH CHECK ADD CONSTRAINT [FK_TBDEX_CFG_OUT_STRUCTURE_TBDEX_CFG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] CHECK CONSTRAINT [FK_TBDEX_CFG_OUT_STRUCTURE_TBDEX_CFG_PROFILE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] WITH CHECK ADD CONSTRAINT [CK_TBDEX_CFG_OUT_STRUCTURE_EXPORT_TYPE] CHECK ((upper([DATA_TYPE])='DATETIME2' OR upper([DATA_TYPE])='DATETIME' OR upper([DATA_TYPE])='DATE' OR upper([DATA_TYPE])='FLOAT' OR upper([DATA_TYPE])='BIGINT' OR upper([DATA_TYPE])='INT' OR upper([DATA_TYPE])='TINYINT' OR upper([DATA_TYPE]) like '%VARCHAR%')) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_OUT_STRUCTURE] CHECK CONSTRAINT [CK_TBDEX_CFG_OUT_STRUCTURE_EXPORT_TYPE] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link PROFILE_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_CFG_OUT_STRUCTURE', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_CFG_OUT_STRUCTURE_TBDEX_CFG_PROFILE' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_PROFILE].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_PROFILE].sql new file mode 100644 index 0000000..272f689 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_PROFILE].sql @@ -0,0 +1,66 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_CFG_PROFILE] Script Date: 07.12.2025 23:16:42 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_CFG_PROFILE]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [ACTIVE] [bit] NOT NULL, + [PROFILE_NAME] [nvarchar](50) NOT NULL, + [DESCRIPTION] [nvarchar](250) NULL, + [MANDANTOR] [nvarchar](50) NOT NULL, + [EXPORT_TYPE] [nvarchar](50) NOT NULL, + [EXPORT_NUMBER_SCHEMA] [nvarchar](25) NOT NULL, + [DEFAULT_DATA_SEPARATOR] [nvarchar](10) NULL, + [LOG_LEVEL] [nvarchar](5) NOT NULL, + [LANGUAGE] [nvarchar](10) NOT NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_CFG_PROFILE] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] ADD CONSTRAINT [DF_TBDEX_CFG_PROFILE_ACTIVE] DEFAULT ((0)) FOR [ACTIVE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] ADD CONSTRAINT [DF_TBDEX_CFG_PROFILE_MANDANTOR] DEFAULT ('DEFAULT') FOR [MANDANTOR] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] ADD CONSTRAINT [DF_TBDEX_CFG_PROFILE_EXPORT_TYPE] DEFAULT (N'DB') FOR [EXPORT_TYPE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] ADD CONSTRAINT [DF_TBDEX_CFG_PROFILE_LOG_LEVEL] DEFAULT ('ERROR') FOR [LOG_LEVEL] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] ADD CONSTRAINT [DF_TBDEX_CFG_PROFILE_LANGUAGE] DEFAULT ('de_DE') FOR [LANGUAGE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] ADD CONSTRAINT [DF_TBDEX_CFG_PROFILE_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] ADD CONSTRAINT [DF_TBDEX_CFG_PROFILE_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] WITH CHECK ADD CONSTRAINT [CK_TBDEX_CFG_PROFILE_EXPORT_TYPE] CHECK ((upper([EXPORT_TYPE])='DB' OR upper([EXPORT_TYPE])='CSV_FILE')) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] CHECK CONSTRAINT [CK_TBDEX_CFG_PROFILE_EXPORT_TYPE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] WITH CHECK ADD CONSTRAINT [CK_TBDEX_CFG_PROFILE_LOG_LEVEL] CHECK ((upper([LOG_LEVEL])='ERROR' OR upper([LOG_LEVEL])='WARN' OR upper([LOG_LEVEL])='INFO')) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_PROFILE] CHECK CONSTRAINT [CK_TBDEX_CFG_PROFILE_LOG_LEVEL] +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_RESOURCES].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_RESOURCES].sql new file mode 100644 index 0000000..effbdd8 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_CFG_RESOURCES].sql @@ -0,0 +1,73 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_CFG_RESOURCES]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [ACTIVE] [bit] NOT NULL, + [SEQUENCE] [tinyint] NOT NULL, + [PLACEHOLDER_NAME] [nvarchar](50) NOT NULL, + [PLACEHOLDER_TYPE] [nvarchar](10) NOT NULL, + [PLACEHOLDER] [nvarchar](max) NOT NULL, + [ERROR_ACTION] [smallint] NULL, + [COMMENT] [nvarchar](250) NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_CFG_RESOURCES] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] ADD CONSTRAINT [DF_TBDEX_CFG_RESOURCES_ACTIVE] DEFAULT ((1)) FOR [ACTIVE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] ADD CONSTRAINT [DF_TBDEX_CFG_RESOURCES_SEQUENCE] DEFAULT ((0)) FOR [SEQUENCE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] ADD CONSTRAINT [DF_TBDEX_CFG_RESOURCES_PLACEHOLDER_NAME] DEFAULT ('DEFAULT') FOR [PLACEHOLDER_NAME] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] ADD CONSTRAINT [DF_TBDEX_CFG_RESOURCES_PLACEHOLDER_TYPE] DEFAULT ('VALUE') FOR [PLACEHOLDER_TYPE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] ADD CONSTRAINT [DF_TBDEX_CFG_RESOURCES_ERROR_ACTION] DEFAULT ((0)) FOR [ERROR_ACTION] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] ADD CONSTRAINT [DF_TBDEX_CFG_RESOURCES_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] ADD CONSTRAINT [DF_TBDEX_CFG_RESOURCES_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] WITH NOCHECK ADD CONSTRAINT [FK_TBDEX_CFG_RESOURCES_TBDEX_CFG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] NOCHECK CONSTRAINT [FK_TBDEX_CFG_RESOURCES_TBDEX_CFG_PROFILE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] WITH CHECK ADD CONSTRAINT [CK_TBDEX_CFG_RESOURCES_PLACEHOLDER_TYPE] CHECK ((upper([PLACEHOLDER_TYPE])='QUERY' OR upper([PLACEHOLDER_TYPE])='CONST')) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] CHECK CONSTRAINT [CK_TBDEX_CFG_RESOURCES_PLACEHOLDER_TYPE] +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] WITH CHECK ADD CONSTRAINT [CK_TBDEX_CFG_RESOURCES_ERROR_ACTION] CHECK (([ERROR_ACTION]=(0) OR [ERROR_ACTION]=(1))) +GO + +ALTER TABLE [dbo].[TBDEX_CFG_RESOURCES] CHECK CONSTRAINT [CK_TBDEX_CFG_RESOURCES_ERROR_ACTION] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Fehlerbehandlung (0 = STOP; 1 = CONTINUE)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_CFG_RESOURCES', @level2type=N'COLUMN',@level2name=N'ERROR_ACTION' +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link PROFILE_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_CFG_RESOURCES', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_CFG_RESOURCES_TBDEX_CFG_PROFILE' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_IN].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_IN].sql new file mode 100644 index 0000000..3816543 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_IN].sql @@ -0,0 +1,48 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_IN] Script Date: 07.12.2025 23:19:58 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_IN] +( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [BATCH_ID] [nvarchar](25) COLLATE Latin1_General_CI_AS NOT NULL, + [REFERENCE1] [nvarchar](150) COLLATE Latin1_General_CI_AS NOT NULL, + [REFERENCE2] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [REFERENCE3] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [REFERENCE4] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [REFERENCE5] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE1] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE2] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE3] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE4] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE5] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [TEST_MODE] [bit] NOT NULL, + [ASYNC_MODE] [bit] NOT NULL, + [COMMENT] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [ADDED_WHO] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + + CONSTRAINT [PK_TBDEX_IN] PRIMARY KEY NONCLUSTERED +( + [GUID] ASC +) +)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY ) +GO + +ALTER TABLE [dbo].[TBDEX_IN] ADD CONSTRAINT [DF_TBDEX_IN_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_IN] ADD CONSTRAINT [DF_TBDEX_IN_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_IN] ADD INDEX [IX_TBDEX_IN_PROFILE_BATCH] NONCLUSTERED ([PROFILE_ID],[BATCH_ID]); +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_OUT].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_OUT].sql new file mode 100644 index 0000000..fba93bb --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_OUT].sql @@ -0,0 +1,50 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_OUT] Script Date: 07.12.2025 13:25:39 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_OUT]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [BATCH_ID] [nvarchar](25) NOT NULL, + [CONTENT] [nvarchar](max) NOT NULL, + [EXPORT_FILE_NAME] [nvarchar](100) NULL, + [EXPORT_FILE_HASH_TYPE] [nvarchar](25) NULL, + [EXPORT_FILE_HASH_VALUE] [nvarchar](250) NULL, + [EXPORT_WHEN] [datetime] NULL, + [EXPORT_STATUS] [tinyint] NULL, + [EXPORT_STATUS_MESSAGE] [nvarchar](max) NULL, + [COMMENT] [nvarchar](max) NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_OUT] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_OUT] ADD CONSTRAINT [DF_TBDEX_OUT_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_OUT] ADD CONSTRAINT [DF_TBDEX_OUT_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_OUT] WITH CHECK ADD CONSTRAINT [FK_TBDEX_OUT_TBDEX_CONFIG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_OUT] CHECK CONSTRAINT [FK_TBDEX_OUT_TBDEX_CONFIG_PROFILE] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link PROFILE_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_OUT', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_OUT_TBDEX_CONFIG_PROFILE' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_OUT_REFERENCES].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_OUT_REFERENCES].sql new file mode 100644 index 0000000..385d802 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_OUT_REFERENCES].sql @@ -0,0 +1,52 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_OUT_REFERENCES] Script Date: 07.12.2025 23:23:07 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_OUT_REFERENCES]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [OUT_ID] [bigint] NOT NULL, + [REFERENCE1] [nvarchar](150) NOT NULL, + [REFERENCE2] [nvarchar](150) NULL, + [REFERENCE3] [nvarchar](150) NULL, + [REFERENCE4] [nvarchar](150) NULL, + [REFERENCE5] [nvarchar](150) NULL, + [EXTERNAL_REFERENCE1] [nvarchar](255) NULL, + [EXTERNAL_REFERENCE2] [nvarchar](255) NULL, + [EXTERNAL_REFERENCE3] [nvarchar](255) NULL, + [EXTERNAL_REFERENCE4] [nvarchar](255) NULL, + [EXTERNAL_REFERENCE5] [nvarchar](255) NULL, + [EXPORT_NUMBER] [nvarchar](50) NOT NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_OUT_REFERENCES] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_OUT_REFERENCES] ADD CONSTRAINT [DF_TBDEX_OUT_REFERENCES_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_OUT_REFERENCES] ADD CONSTRAINT [DF_TBDEX_OUT_REFERENCES_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_OUT_REFERENCES] WITH CHECK ADD CONSTRAINT [FK_TBDEX_OUT_REFERENCES_TBDEX_OUT] FOREIGN KEY([OUT_ID]) +REFERENCES [dbo].[TBDEX_OUT] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_OUT_REFERENCES] CHECK CONSTRAINT [FK_TBDEX_OUT_REFERENCES_TBDEX_OUT] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link OUT_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_OUT_REFERENCES', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_OUT_REFERENCES_TBDEX_OUT' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_LOG].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_LOG].sql new file mode 100644 index 0000000..af67b89 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_LOG].sql @@ -0,0 +1,75 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_RUN_LOG] Script Date: 07.12.2025 23:25:20 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_RUN_LOG]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [BATCH_ID] [nvarchar](25) NULL, + [LOG_LEVEL] [nvarchar](25) NOT NULL, + [REFERENCE1] [nvarchar](150) NULL, + [REFERENCE2] [nvarchar](150) NULL, + [REFERENCE3] [nvarchar](150) NULL, + [REFERENCE4] [nvarchar](150) NULL, + [REFERENCE5] [nvarchar](150) NULL, + [RETURN_CODE] [int] 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](250) NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + CONSTRAINT [PK_TBDEX_RUN_LOG_GUID] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (DATA_COMPRESSION = PAGE, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] ADD CONSTRAINT [DF_TBDEX_RUN_LOG_REFERENCE1] DEFAULT ((0)) FOR [PROFILE_ID] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] ADD CONSTRAINT [DF_TBDEX_RUN_LOG_LOG_LEVEL] DEFAULT ('UNKNOWN') FOR [LOG_LEVEL] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] ADD CONSTRAINT [DF_TBDEX_RUN_LOG_RETURN_CODE] DEFAULT ((0)) FOR [RETURN_CODE] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] ADD CONSTRAINT [DF_TBDEX_RUN_LOG_MESSAGE1] DEFAULT ('NO MESSAGE GIVEN') FOR [MESSAGE1] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] ADD CONSTRAINT [DF_TBDEX_RUN_LOG_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] ADD CONSTRAINT [DF_TBDEX_RUN_LOG_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] WITH CHECK ADD CONSTRAINT [FK_TBDEX_RUN_LOG_TBDEX_CFG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_RUN_LOG] CHECK CONSTRAINT [FK_TBDEX_RUN_LOG_TBDEX_CFG_PROFILE] +GO + +CREATE NONCLUSTERED INDEX [IX_TBDEX_RUN_LOG_PROFILE_BATCH] ON [dbo].[TBDEX_RUN_LOG] +( + [PROFILE_ID] ASC, + [BATCH_ID] ASC, + [ADDED_WHEN] DESC +) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link PROFILE_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_RUN_LOG', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_RUN_LOG_TBDEX_CFG_PROFILE' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_NUMBER_RANGE].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_NUMBER_RANGE].sql new file mode 100644 index 0000000..1435d8b --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_NUMBER_RANGE].sql @@ -0,0 +1,52 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_RUN_NUMBER_RANGE] Script Date: 07.12.2025 23:26:21 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_RUN_NUMBER_RANGE]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [ACTIVE] [bit] NOT NULL, + [DESCRIPTION] [nvarchar](50) NULL, + [EXPORT_NUMBER_SCHEMA] [nvarchar](25) NOT NULL, + [EXPORT_NUMBER_COUNTER] [bigint] NOT NULL, + [EXPORT_NUMBER] [nvarchar](25) NOT NULL, + [VALID_FROM] [date] NULL, + [VALID_TO] [date] NULL, + [COMMENT] [nvarchar](250) NULL, + [ADDED_WHO] [nvarchar](50) NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) NULL, + [CHANGED_WHEN] [datetime] NULL, + CONSTRAINT [PK_TBDEX_RUN_NUMBER_RANGE] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_NUMBER_RANGE] ADD CONSTRAINT [DF_TBDEX_RUN_NUMBER_RANGE_ACTIVE] DEFAULT ((0)) FOR [ACTIVE] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_NUMBER_RANGE] ADD CONSTRAINT [DF_TBDEX_RUN_NUMBER_RANGE_ADDED_WHO] DEFAULT ('DD_ECM DB-Internal') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_NUMBER_RANGE] ADD CONSTRAINT [DF_TBDEX_RUN_NUMBER_RANGE_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_NUMBER_RANGE] WITH CHECK ADD CONSTRAINT [FK_TBDEX_RUN_NUMBER_RANGE_TBDEX_CFG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_RUN_NUMBER_RANGE] CHECK CONSTRAINT [FK_TBDEX_RUN_NUMBER_RANGE_TBDEX_CFG_PROFILE] +GO + +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Link PROFILE_ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TBDEX_RUN_NUMBER_RANGE', @level2type=N'CONSTRAINT',@level2name=N'FK_TBDEX_RUN_NUMBER_RANGE_TBDEX_CFG_PROFILE' +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_PROFILE].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_PROFILE].sql new file mode 100644 index 0000000..58b8912 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_RUN_PROFILE].sql @@ -0,0 +1,32 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_RUN_PROFILE] Script Date: 07.12.2025 23:26:49 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_RUN_PROFILE]( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [FIRST_RUN] [datetime] NULL, + [LAST_RUN] [datetime] NULL, + [LAST_BATCH_ID] [nvarchar](25) NULL, + [LAST_RESULT] [nvarchar](250) NULL + CONSTRAINT [PK_TBDEX_RUN_PROFILE] PRIMARY KEY CLUSTERED +( + [GUID] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[TBDEX_RUN_PROFILE] WITH CHECK ADD CONSTRAINT [FK_TBDEX_RUN_PROFILE_TBDEX_CFG_PROFILE] FOREIGN KEY([PROFILE_ID]) +REFERENCES [dbo].[TBDEX_CFG_PROFILE] ([GUID]) +GO + +ALTER TABLE [dbo].[TBDEX_RUN_PROFILE] CHECK CONSTRAINT [FK_TBDEX_RUN_PROFILE_TBDEX_CFG_PROFILE] +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_PROCESS].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_PROCESS].sql new file mode 100644 index 0000000..823e650 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_PROCESS].sql @@ -0,0 +1,46 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_TMP_PROCESS] Script Date: 07.12.2025 23:29:04 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_TMP_PROCESS] +( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [BATCH_ID] [nvarchar](25) COLLATE Latin1_General_CI_AS NOT NULL, + [TBDEX_TMP_TABLE_SCHEMA] [nvarchar](15) COLLATE Latin1_General_CI_AS NULL, + [TBDEX_TMP_TABLE_NAME] [nvarchar](128) COLLATE Latin1_General_CI_AS NULL, + [TBDEX_TMP_TABLE_SCHEMA_AND_NAME] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [TBDEX_TMP_TABLE_COLUMNS] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, + [TBDEX_TMP_TABLE_DROP_QUERY] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, + [TBDEX_TMP_TABLE_CREATE_QUERY] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, + [TBDEX_TMP_TABLE_INSERT_QUERY] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, + [TBDEX_TMP_TABLE_CONTENT] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL, + [COMMENT] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [ADDED_WHO] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + [CHANGED_WHO] [nvarchar](50) COLLATE Latin1_General_CI_AS NULL, + [CHANGED_WHEN] [datetime] NULL, + + CONSTRAINT [PK_TBDEX_TMP_PROCESS] PRIMARY KEY NONCLUSTERED +( + [GUID] ASC +) +)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY ) +GO + +ALTER TABLE [dbo].[TBDEX_TMP_PROCESS] ADD CONSTRAINT [DF_TBDEX_TMP_PROCESS_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_TMP_PROCESS] ADD CONSTRAINT [DF_TBDEX_TMP_PROCESS_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_TMP_PROCESS] ADD INDEX [IX_TBDEX_TMP_PROCESS_PROFILE_BATCH] NONCLUSTERED ([PROFILE_ID],[BATCH_ID]); +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_PROCESS_REFERENCES].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_PROCESS_REFERENCES].sql new file mode 100644 index 0000000..b4f4e2e --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_PROCESS_REFERENCES].sql @@ -0,0 +1,48 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_TMP_PROCESS_REFERENCES] Script Date: 07.12.2025 23:29:37 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_TMP_PROCESS_REFERENCES] +( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [BATCH_ID] [nvarchar](25) COLLATE Latin1_General_CI_AS NOT NULL, + [REFERENCE1] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [REFERENCE2] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [REFERENCE3] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [REFERENCE4] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [REFERENCE5] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE1] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE2] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE3] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE4] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXTERNAL_REFERENCE5] [nvarchar](2000) COLLATE Latin1_General_CI_AS NULL, + [EXPORT_NUMBER_COUNTER] [bigint] NULL, + [EXPORT_NUMBER] [nvarchar](25) COLLATE Latin1_General_CI_AS NULL, + [COMMENT] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [ADDED_WHO] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + + CONSTRAINT [PK_TBDEX_TMP_PROCESS_REFERENCES] PRIMARY KEY NONCLUSTERED +( + [GUID] ASC +) +)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY ) +GO + +ALTER TABLE [dbo].[TBDEX_TMP_PROCESS_REFERENCES] ADD CONSTRAINT [DF_TBDEX_TMP_PROCESS_REFERENCES_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_TMP_PROCESS_REFERENCES] ADD CONSTRAINT [DF_TBDEX_TMP_PROCESS_REFERENCES_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_TMP_PROCESS_REFERENCES] ADD INDEX [IX_TBDEX_TMP_PROCESS_REFERENCES_PROFILE_BATCH] NONCLUSTERED ([PROFILE_ID],[BATCH_ID]); +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_QUERY].sql b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_QUERY].sql new file mode 100644 index 0000000..0593036 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[TBDEX_TMP_QUERY].sql @@ -0,0 +1,37 @@ +USE [DD_ECM] +GO + +/****** Object: Table [dbo].[TBDEX_TMP_QUERY] Script Date: 07.12.2025 23:30:22 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[TBDEX_TMP_QUERY] +( + [GUID] [bigint] IDENTITY(1,1) NOT NULL, + [PROFILE_ID] [bigint] NOT NULL, + [BATCH_ID] [nvarchar](25) COLLATE Latin1_General_CI_AS NOT NULL, + [QUERY] [nvarchar](max) COLLATE Latin1_General_CI_AS NOT NULL, + [COMMENT] [nvarchar](150) COLLATE Latin1_General_CI_AS NULL, + [ADDED_WHO] [nvarchar](50) COLLATE Latin1_General_CI_AS NOT NULL, + [ADDED_WHEN] [datetime] NOT NULL, + + CONSTRAINT [PK_TBDEX_TMP_QUERY] PRIMARY KEY NONCLUSTERED +( + [GUID] ASC +) +)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY ) +GO + +ALTER TABLE [dbo].[TBDEX_TMP_QUERY] ADD CONSTRAINT [DF_TBDEX_TMP_QUERY_ADDED_WHO] DEFAULT ('DEFAULT') FOR [ADDED_WHO] +GO + +ALTER TABLE [dbo].[TBDEX_TMP_QUERY] ADD CONSTRAINT [DF_TBDEX_TMP_QUERY_ADDED_WHEN] DEFAULT (getdate()) FOR [ADDED_WHEN] +GO + +ALTER TABLE [dbo].[TBDEX_TMP_QUERY] ADD INDEX [IX_TBDEX_TMP_QUERY_PROFILE_BATCH] NONCLUSTERED ([PROFILE_ID],[BATCH_ID]); +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_OUT].sql b/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_OUT].sql new file mode 100644 index 0000000..82813c7 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_OUT].sql @@ -0,0 +1,58 @@ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [VWDEX_OUT] +-- ================================================================= +-- Vereint die Datenabfragen aus der OUTPUT und OUTPUT Reference TB +-- +-- Returns: SQL table +-- ================================================================= +-- Copyright (c) 2025 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: 28.02.2025 / MK +-- Version Date / Editor: 28.02.2025 / MK +-- Version Number: 1.0.0.0 +-- ================================================================= +-- History: + +CREATE OR ALTER VIEW [dbo].[VWDEX_OUT] +as +SELECT + [O].[GUID], + [O].[PROFILE_ID], + [O].[BATCH_ID], + [O].[CONTENT], + [O].[EXPORT_FILE_NAME], + [O].[EXPORT_FILE_HASH_TYPE], + [O].[EXPORT_FILE_HASH_VALUE], + [O].[EXPORT_WHEN], + [O].[EXPORT_STATUS], + [O].[EXPORT_STATUS_MESSAGE], + [O].[COMMENT], + [O].[ADDED_WHO], + [O].[ADDED_WHEN], + [O].[CHANGED_WHO], + [O].[CHANGED_WHEN], + [OR].[EXPORT_NUMBER], + [OR].[REFERENCE1], + [OR].[REFERENCE2], + [OR].[REFERENCE3], + [OR].[REFERENCE4], + [OR].[REFERENCE5], + [OR].[EXTERNAL_REFERENCE1], + [OR].[EXTERNAL_REFERENCE2], + [OR].[EXTERNAL_REFERENCE3], + [OR].[EXTERNAL_REFERENCE4], + [OR].[EXTERNAL_REFERENCE5] + + FROM [TBDEX_OUT] AS [O] + INNER JOIN [TBDEX_OUT_REFERENCES] AS [OR] ON [O].[GUID] = [OR].[OUT_ID]; + +GO + + diff --git a/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_PROFILE].sql b/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_PROFILE].sql new file mode 100644 index 0000000..3415ecd --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_PROFILE].sql @@ -0,0 +1,32 @@ +CREATE OR ALTER VIEW [VWDEX_PROFILE] +as +SELECT + [CFG_PROFILE].[GUID], + [CFG_PROFILE].[ACTIVE], + [CFG_PROFILE].[PROFILE_NAME], + [CFG_PROFILE].[DESCRIPTION], + [CFG_PROFILE].[MANDANTOR], + [CFG_PROFILE].[EXPORT_TYPE], + [CFG_PROFILE].[EXPORT_NUMBER_SCHEMA], + [CFG_PROFILE].[DEFAULT_DATA_SEPARATOR], + CASE + WHEN [CFG_PROFILE].[LOG_LEVEL] IS NULL -- In case of using the LOG_LEVEL Parameter + THEN 'INFO' + + WHEN [CFG_PROFILE].[LOG_LEVEL] NOT IN ('INFO','WARN','ERROR') + THEN 'INFO' + + ELSE [CFG_PROFILE].[LOG_LEVEL] + END as 'LOG_LEVEL', + [CFG_PROFILE].[LANGUAGE], + [CFG_PROFILE].[ADDED_WHO], + [CFG_PROFILE].[ADDED_WHEN], + [CFG_PROFILE].[CHANGED_WHO], + [CFG_PROFILE].[CHANGED_WHEN], + [RUN_PROFILE].[FIRST_RUN], + [RUN_PROFILE].[LAST_RUN], + [RUN_PROFILE].[LAST_BATCH_ID], + [RUN_PROFILE].[LAST_RESULT] + + FROM [TBDEX_CFG_PROFILE] as [CFG_PROFILE] + LEFT JOIN [TBDEX_RUN_PROFILE] as [RUN_PROFILE] ON [CFG_PROFILE].[GUID] = [RUN_PROFILE].[PROFILE_ID]; diff --git a/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_RESOURCES].sql b/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_RESOURCES].sql new file mode 100644 index 0000000..0734a22 --- /dev/null +++ b/current/[DD_ECM]-Database/DEX_SQL/[VWDEX_RESOURCES].sql @@ -0,0 +1,22 @@ +CREATE OR ALTER VIEW [VWDEX_RESOURCES] +as +SELECT [CFG_RESOURCES].[GUID], + [CFG_RESOURCES].[PROFILE_ID], + [CFG_RESOURCES].[ACTIVE], + [CFG_RESOURCES].[SEQUENCE], + [CFG_RESOURCES].[PLACEHOLDER_NAME], + [CFG_RESOURCES].[PLACEHOLDER_TYPE], + [CFG_RESOURCES].[PLACEHOLDER], + CASE + WHEN [CFG_RESOURCES].[ERROR_ACTION] = 0 + THEN 'STOP' + WHEN [CFG_RESOURCES].[ERROR_ACTION] = 1 + THEN 'CONTINUE' + ELSE 'UNDEFINED' + END as 'ERROR_ACTION', + [CFG_RESOURCES].[COMMENT], + [CFG_RESOURCES].[ADDED_WHO], + [CFG_RESOURCES].[ADDED_WHEN], + [CFG_RESOURCES].[CHANGED_WHO], + [CFG_RESOURCES].[CHANGED_WHEN] + FROM [dbo].[TBDEX_CFG_RESOURCES] as [CFG_RESOURCES]; diff --git a/current/[DD_SYS]-Database/[PRDD_GET_DATABASE_OBJECT]/[PRDD_GET_DATABASE_OBJECT].sql b/current/[DD_SYS]-Database/[PRDD_GET_DATABASE_OBJECT]/[PRDD_GET_DATABASE_OBJECT].sql new file mode 100644 index 0000000..890f682 --- /dev/null +++ b/current/[DD_SYS]-Database/[PRDD_GET_DATABASE_OBJECT]/[PRDD_GET_DATABASE_OBJECT].sql @@ -0,0 +1,1184 @@ +USE [DD_SYS] +GO + +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO + +-- [PRDD_GET_DATABASE_OBJECT] +-- ================================================================= +-- Searches all user databases (excluding system DBs) for a search term in: +-- (1) Module definitions (procedures, views, functions, triggers) +-- (2) Table names +-- (3) Column names +-- (4) Data values in text-like table columns (optional) +-- +-- Optional: Replace @pSEARCHVALUE with @pREPLACEWITH inside found module definitions +-- and/or data values in text-like table columns. +-- Minimum requirement: MS SQL Server 2016 +-- +-- Returns: INT Value - 0 = Everything worked well +-- ================================================================= +-- Copyright (c) 2026 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: 05.02.2026 / GPT +-- Version Date / Editor: 16.02.2026 / GPT +-- Version Number: 1.2.2.0 +-- ================================================================= +-- History: +-- 05.02.2026 / GPT - First Version (project style) +-- 05.02.2026 / GPT - Added flow PRINT messages, removed compatibility wrapper +-- 05.02.2026 / GPT - Renamed to PRDD_GET_DATABASE_OBJECT +-- 05.02.2026 / GPT - Temp table naming changed to: #TBDD_GET_DATABASE_OBJECT_ +-- 05.02.2026 / GPT - Critical review fixes: explicit SET options for replace, improved error context, replace warnings +-- 05.02.2026 / GPT - Added optional data-value scan across textual table columns +-- 05.02.2026 / GPT - Added optional data-value replace with dedicated log/resultset +-- 06.02.2026 / GPT - Collation conflict fixes across cross-database scans and summaries (LIKE/EQUAL) +-- 06.02.2026 / GPT - Added safe non-execute scan/plan SQL path to avoid compile-time collation conflicts +-- 16.02.2026 / GPT - F01: LIKE-Wildcards (%,_,[) im Suchbegriff werden nun escaped +-- 16.02.2026 / GPT - F02: Konsistente COLLATE-Angabe auf @sv in beiden SQL-Pfaden +-- 16.02.2026 / GPT - F04: Cursor db_cur wird vor RETURN bei Collation-Fehler sauber geschlossen +-- 16.02.2026 / GPT - F05: Kommentare werden vor CREATE-Position-Erkennung entfernt (Spaces preserving) + +CREATE OR ALTER PROCEDURE [dbo].[PRDD_GET_DATABASE_OBJECT] ( + @pSEARCHVALUE NVARCHAR(100) = NULL, -- Search term + @pINCLUDEDATABASES NVARCHAR(MAX) = NULL, -- Optional whitelist (CSV): 'DB1,DB2' -> only these are searched + @pEXCLUDEDATABASES NVARCHAR(MAX) = NULL, -- Optional blacklist (CSV): 'DB3,DB4' -> excluded from search + @pREPLACEWITH NVARCHAR(100) = NULL, -- Optional replacement term (module definitions / data values) + @pDOREPLACE BIT = 0, -- 1 = execute replacement, 0 = only search / plan + @pINCLUDEDATAVALUES BIT = 1, -- 1 = also scan text-like data values in tables, 0 = skip data scan + @pDOREPLACEDATAVALUES BIT = 0 -- 1 = execute data-value replace, 0 = only data scan / plan +) +AS +BEGIN + + --================================================-- Set session options --===============================================-- + SET NOCOUNT ON; + SET ANSI_NULLS ON; + SET QUOTED_IDENTIFIER ON; + ---------------------------------------------------------------------------------------------------------------------------- + + --=========================================-- Parameter copies (avoid sniffing) --========================================-- + DECLARE @SEARCHVALUE NVARCHAR(100) = LTRIM(RTRIM(ISNULL(@pSEARCHVALUE,N''))), + @INCLUDEDATABASES NVARCHAR(MAX) = NULLIF(LTRIM(RTRIM(ISNULL(@pINCLUDEDATABASES,N''))),N''), + @EXCLUDEDATABASES NVARCHAR(MAX) = NULLIF(LTRIM(RTRIM(ISNULL(@pEXCLUDEDATABASES,N''))),N''), + @REPLACEWITH NVARCHAR(100) = NULLIF(LTRIM(RTRIM(ISNULL(@pREPLACEWITH,N''))),N''), + @DOREPLACE BIT = ISNULL(@pDOREPLACE,0), + @INCLUDEDATAVALUES BIT = ISNULL(@pINCLUDEDATAVALUES,1), + @DOREPLACEDATAVALUES BIT = ISNULL(@pDOREPLACEDATAVALUES,0); + ---------------------------------------------------------------------------------------------------------------------------- + + --=================================================-- Declare runtime variables --========================================-- + DECLARE @MY_PROCEDURE_NAME NVARCHAR(128) = OBJECT_NAME(@@PROCID); + DECLARE @SQLCommand NVARCHAR(MAX) = NULL, + @CurrentDB NVARCHAR(128) = NULL, + @CurrentDBCollation SYSNAME = NULL, + @return_status INT = 0, + @return_status_text NVARCHAR(MAX) = 'START PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(varchar(50),GETDATE(),120), + @return_error_text NVARCHAR(MAX) = ''; + + DECLARE @START_TIME DATETIME2(0) = SYSDATETIME(); + ---------------------------------------------------------------------------------------------------------------------------- + + IF (@DOREPLACEDATAVALUES = 1) BEGIN + SET @INCLUDEDATAVALUES = 1; -- replace implies scan + END; + + --=================================================-- Flow / Parameter output --==========================================-- + PRINT '===================================================================================================='; + PRINT @return_status_text; + PRINT ''; + PRINT 'PARAMETER01 - @SEARCHVALUE: ' + CONVERT(NVARCHAR(200),@SEARCHVALUE); + PRINT 'PARAMETER02 - @INCLUDEDATABASES: ' + CONVERT(NVARCHAR(200),ISNULL(@INCLUDEDATABASES,N'')); + PRINT 'PARAMETER03 - @EXCLUDEDATABASES: ' + CONVERT(NVARCHAR(200),ISNULL(@EXCLUDEDATABASES,N'')); + PRINT 'PARAMETER04 - @REPLACEWITH: ' + CONVERT(NVARCHAR(200),ISNULL(@REPLACEWITH,N'')); + PRINT 'PARAMETER05 - @DOREPLACE: ' + CONVERT(NVARCHAR(10),@DOREPLACE); + PRINT 'PARAMETER06 - @INCLUDEDATAVALUES: ' + CONVERT(NVARCHAR(10),@INCLUDEDATAVALUES); + PRINT 'PARAMETER07 - @DOREPLACEDATAVALUES: ' + CONVERT(NVARCHAR(10),@DOREPLACEDATAVALUES); + PRINT ''; + + IF (@REPLACEWITH IS NOT NULL) AND (LEN(@REPLACEWITH) > 0) AND (@DOREPLACE = 0) BEGIN + PRINT 'MODE: SEARCH + REPLACE PLAN (DRY-RUN) - no changes will be executed.'; + PRINT 'INFO: Resultset [OBJECT_DEFINITION] contains the CURRENT definition (no replace applied).'; + END + ELSE IF (@REPLACEWITH IS NOT NULL) AND (LEN(@REPLACEWITH) > 0) AND (@DOREPLACE = 1) BEGIN + PRINT 'MODE: SEARCH + REPLACE EXECUTION - module definitions may be ALTERed!'; + PRINT 'INFO: Resultset [OBJECT_DEFINITION] may contain PRE-REPLACE definitions (captured before ALTER).'; + END + ELSE BEGIN + PRINT 'MODE: SEARCH ONLY'; + END; + + IF ((@DOREPLACE = 1) OR (@DOREPLACEDATAVALUES = 1)) AND (@REPLACEWITH IS NOT NULL) AND (@SEARCHVALUE = @REPLACEWITH) BEGIN + PRINT 'WARNING: @SEARCHVALUE equals @REPLACEWITH -> replace execution will do no functional changes.'; + END; + + IF (@INCLUDEDATAVALUES = 1) BEGIN + PRINT 'DATA VALUE SCAN: ENABLED (text-like columns in user tables).'; + END + ELSE BEGIN + PRINT 'DATA VALUE SCAN: DISABLED.'; + END; + + IF (@DOREPLACEDATAVALUES = 1) BEGIN + PRINT 'DATA VALUE REPLACE: EXECUTION ENABLED (matched rows in text-like columns will be updated).'; + END + ELSE IF (@REPLACEWITH IS NOT NULL) AND (LEN(@REPLACEWITH) > 0) AND (@INCLUDEDATAVALUES = 1) BEGIN + PRINT 'DATA VALUE REPLACE: PLAN ONLY (no data row updates).'; + END; + + PRINT '----------------------------------------------------------------------------------------------------'; + ---------------------------------------------------------------------------------------------------------------------------- + + --=================================================-- Validate parameters --==============================================-- + IF (@SEARCHVALUE IS NULL) OR (LEN(@SEARCHVALUE) = 0) BEGIN + SET @return_status = 10; + SET @return_status_text = 'ERROR: @pSEARCHVALUE must not be NULL/empty!'; + PRINT @return_status_text; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + END; + + IF (@DOREPLACE = 1) AND ((@REPLACEWITH IS NULL) OR (LEN(@REPLACEWITH) = 0)) BEGIN + SET @return_status = 11; + SET @return_status_text = 'ERROR: @pREPLACEWITH must be set when @pDOREPLACE = 1!'; + PRINT @return_status_text; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + END; + + IF (@DOREPLACEDATAVALUES = 1) AND ((@REPLACEWITH IS NULL) OR (LEN(@REPLACEWITH) = 0)) BEGIN + SET @return_status = 12; + SET @return_status_text = 'ERROR: @pREPLACEWITH must be set when @pDOREPLACEDATAVALUES = 1!'; + PRINT @return_status_text; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + END; + + PRINT 'STEP: Parameter validation OK.'; + PRINT '----------------------------------------------------------------------------------------------------'; + ---------------------------------------------------------------------------------------------------------------------------- + + --==============================================-- Prepare temp tables --================================================-- + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_DB_INCLUDE') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE; END; + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_DB_EXCLUDE') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_DB_EXCLUDE; END; + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_DB_LIST') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_DB_LIST; END; + + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_RESULTS') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_RESULTS; END; + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_DATAMATCHES') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_DATAMATCHES; END; + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG; END; + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_REPLACELOG') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_REPLACELOG; END; + IF OBJECT_ID('tempdb..#TBDD_GET_DATABASE_OBJECT_ERRORS') IS NOT NULL BEGIN DROP TABLE #TBDD_GET_DATABASE_OBJECT_ERRORS; END; + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE ( + [DBNAME] [NVARCHAR](128) NOT NULL PRIMARY KEY CLUSTERED ([DBNAME] ASC) + ); + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_DB_EXCLUDE ( + [DBNAME] [NVARCHAR](128) NOT NULL PRIMARY KEY CLUSTERED ([DBNAME] ASC) + ); + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_DB_LIST ( + [DBNAME] [NVARCHAR](128) NOT NULL PRIMARY KEY CLUSTERED ([DBNAME] ASC) + ); + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_RESULTS ( + [DATABASE_NAME] [NVARCHAR](128) NOT NULL, + [OBJECT_TYPE] [NVARCHAR](60) NOT NULL, + [SCHEMA_NAME] [NVARCHAR](128) NULL, + [OBJECT_NAME] [NVARCHAR](128) NULL, + [COLUMN_NAME] [NVARCHAR](128) NULL, + [OBJECT_DEFINITION] [NVARCHAR](MAX) NULL + ); + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_DATAMATCHES ( + [DATABASE_NAME] [NVARCHAR](128) NOT NULL, + [SCHEMA_NAME] [NVARCHAR](128) NOT NULL, + [TABLE_NAME] [NVARCHAR](128) NOT NULL, + [COLUMN_NAME] [NVARCHAR](128) NOT NULL, + [MATCH_COUNT] [INT] NOT NULL, + [SAMPLE_VALUE] [NVARCHAR](4000) NULL + ); + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG ( + [DATABASE_NAME] [NVARCHAR](128) NOT NULL, + [SCHEMA_NAME] [NVARCHAR](128) NOT NULL, + [TABLE_NAME] [NVARCHAR](128) NOT NULL, + [COLUMN_NAME] [NVARCHAR](128) NOT NULL, + [MATCH_COUNT] [INT] NOT NULL, + [UPDATED_ROWS] [INT] NOT NULL, + [ACTION] [NVARCHAR](20) NOT NULL, -- PLANNED / UPDATED / SKIPPED / ERROR + [ERROR_MESSAGE] [NVARCHAR](MAX) NULL + ); + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_REPLACELOG ( + [DATABASE_NAME] [NVARCHAR](128) NOT NULL, + [OBJECT_TYPE] [NVARCHAR](60) NOT NULL, + [SCHEMA_NAME] [NVARCHAR](128) NOT NULL, + [OBJECT_NAME] [NVARCHAR](128) NOT NULL, + [OCCURRENCE_COUNT] [INT] NOT NULL, + [ACTION] [NVARCHAR](20) NOT NULL, -- PLANNED / UPDATED / SKIPPED / ERROR + [ERROR_MESSAGE] [NVARCHAR](MAX) NULL + ); + + CREATE TABLE #TBDD_GET_DATABASE_OBJECT_ERRORS ( + [DATABASE_NAME] [NVARCHAR](128) NOT NULL, + [ERROR_NUMBER] [INT] NOT NULL, + [ERROR_MESSAGE] [NVARCHAR](MAX) NOT NULL + ); + + PRINT 'STEP: Temporary tables prepared (#TBDD_GET_DATABASE_OBJECT_*).'; + PRINT '----------------------------------------------------------------------------------------------------'; + ---------------------------------------------------------------------------------------------------------------------------- + + --===========================================-- Parse whitelist / blacklist --===========================================-- + IF (@INCLUDEDATABASES IS NOT NULL) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE([DBNAME]) + SELECT DISTINCT TRY_CONVERT(NVARCHAR(128),LTRIM(RTRIM([value]))) + FROM string_split(@INCLUDEDATABASES,N',') + WHERE LTRIM(RTRIM([value])) <> N'' + AND TRY_CONVERT(NVARCHAR(128),LTRIM(RTRIM([value]))) IS NOT NULL; + + PRINT 'STEP: Whitelist parsed: ' + CONVERT(NVARCHAR(20),@@ROWCOUNT) + ' entry/entries.'; + END + ELSE BEGIN + PRINT 'STEP: Whitelist not set -> all user DBs are candidates (before blacklist).'; + END; + + IF (@EXCLUDEDATABASES IS NOT NULL) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DB_EXCLUDE([DBNAME]) + SELECT DISTINCT TRY_CONVERT(NVARCHAR(128),LTRIM(RTRIM([value]))) + FROM string_split(@EXCLUDEDATABASES,N',') + WHERE LTRIM(RTRIM([value])) <> N'' + AND TRY_CONVERT(NVARCHAR(128),LTRIM(RTRIM([value]))) IS NOT NULL; + + PRINT 'STEP: Blacklist parsed: ' + CONVERT(NVARCHAR(20),@@ROWCOUNT) + ' entry/entries.'; + END + ELSE BEGIN + PRINT 'STEP: Blacklist not set.'; + END; + + PRINT '----------------------------------------------------------------------------------------------------'; + ---------------------------------------------------------------------------------------------------------------------------- + + --====================================-- Validate: DB names exist (whitelist/blacklist) --==============================-- + DECLARE @MissingInclude NVARCHAR(MAX) = NULL; + DECLARE @MissingExclude NVARCHAR(MAX) = NULL; + + SELECT @MissingInclude = + STUFF(( + SELECT N', ' + i.[DBNAME] + FROM #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE i + LEFT JOIN [sys].[databases] d ON d.[name] = i.[DBNAME] + WHERE d.[name] IS NULL + FOR XML PATH(''), TYPE + ).value('.','NVARCHAR(MAX)'),1,2,N''); + + IF (@MissingInclude IS NOT NULL) AND (LEN(@MissingInclude) > 0) BEGIN + SET @return_status = 20; + SET @return_status_text = 'ERROR: Whitelist contains non-existing database(s): ' + @MissingInclude; + PRINT @return_status_text; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + END; + + SELECT @MissingExclude = + STUFF(( + SELECT N', ' + e.[DBNAME] + FROM #TBDD_GET_DATABASE_OBJECT_DB_EXCLUDE e + LEFT JOIN [sys].[databases] d ON d.[name] = e.[DBNAME] + WHERE d.[name] IS NULL + FOR XML PATH(''), TYPE + ).value('.','NVARCHAR(MAX)'),1,2,N''); + + IF (@MissingExclude IS NOT NULL) AND (LEN(@MissingExclude) > 0) BEGIN + SET @return_status = 21; + SET @return_status_text = 'ERROR: Blacklist contains non-existing database(s): ' + @MissingExclude; + PRINT @return_status_text; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + END; + + PRINT 'STEP: Database name validation OK (whitelist/blacklist).'; + PRINT '----------------------------------------------------------------------------------------------------'; + ---------------------------------------------------------------------------------------------------------------------------- + + --===========================-- Validate: included DBs are eligible & accessible --======================================-- + IF EXISTS (SELECT 1 FROM #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE) BEGIN + + DECLARE @BadInclude NVARCHAR(MAX) = NULL; + + SELECT @BadInclude = + STUFF(( + SELECT N', ' + i.[DBNAME] + FROM #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE i + LEFT JOIN [sys].[databases] d + ON d.[name] = i.[DBNAME] + AND d.[database_id] > 4 + AND d.[state_desc] = N'ONLINE' + AND d.[is_distributor] = 0 + AND d.[source_database_id] IS NULL + AND HAS_DBACCESS(d.[name]) = 1 + AND ((@DOREPLACE = 0 AND @DOREPLACEDATAVALUES = 0) OR d.[is_read_only] = 0) + WHERE d.[name] IS NULL + FOR XML PATH(''), TYPE + ).value('.','NVARCHAR(MAX)'),1,2,N''); + + IF (@BadInclude IS NOT NULL) AND (LEN(@BadInclude) > 0) BEGIN + SET @return_status = 22; + SET @return_status_text = 'ERROR: Whitelist contains database(s) that are not searchable (system/offline/snapshot/no access/read-only in replace-mode): ' + @BadInclude; + PRINT @return_status_text; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + END; + + END; + + PRINT 'STEP: Whitelist eligibility check OK.'; + PRINT '----------------------------------------------------------------------------------------------------'; + ---------------------------------------------------------------------------------------------------------------------------- + + --===========================================-- Build database worklist --===============================================-- + PRINT 'STEP: Build database worklist...'; + + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DB_LIST([DBNAME]) + SELECT d.[name] + FROM [sys].[databases] d + WHERE d.[database_id] > 4 + AND d.[state_desc] = N'ONLINE' + AND d.[is_distributor] = 0 + AND d.[source_database_id] IS NULL + AND HAS_DBACCESS(d.[name]) = 1 + AND ((@DOREPLACE = 0 AND @DOREPLACEDATAVALUES = 0) OR d.[is_read_only] = 0) + AND ( + (EXISTS (SELECT 1 FROM #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE) AND d.[name] IN (SELECT [DBNAME] FROM #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE)) + OR + (NOT EXISTS (SELECT 1 FROM #TBDD_GET_DATABASE_OBJECT_DB_INCLUDE)) + ) + AND d.[name] NOT IN (SELECT [DBNAME] FROM #TBDD_GET_DATABASE_OBJECT_DB_EXCLUDE); + + DECLARE @DBCOUNT INT = (SELECT COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DB_LIST); + PRINT 'STEP: Worklist created: ' + CONVERT(NVARCHAR(20),@DBCOUNT) + ' database(s).'; + PRINT '----------------------------------------------------------------------------------------------------'; + + IF (@DBCOUNT = 0) BEGIN + PRINT 'INFO: No databases to process based on whitelist/blacklist and eligibility filters.'; + PRINT 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(varchar(50),GETDATE(),120); + PRINT '===================================================================================================='; + RETURN 0; + END; + ---------------------------------------------------------------------------------------------------------------------------- + + --===============================================-- Search / Replace loop --=============================================-- + BEGIN TRY + + DECLARE @DBINDEX INT = 0; + + DECLARE db_cur CURSOR LOCAL FAST_FORWARD FOR + SELECT [DBNAME] FROM #TBDD_GET_DATABASE_OBJECT_DB_LIST ORDER BY [DBNAME]; + + OPEN db_cur; + FETCH NEXT FROM db_cur INTO @CurrentDB; + + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @DBINDEX = @DBINDEX + 1; + SELECT @CurrentDBCollation = d.[collation_name] FROM [sys].[databases] d WHERE d.[name] COLLATE DATABASE_DEFAULT = @CurrentDB; + + IF (@CurrentDBCollation IS NULL) BEGIN + SET @return_status = 23; + SET @return_status_text = 'ERROR: Could not resolve collation for database [' + @CurrentDB + '].'; + PRINT @return_status_text; + IF CURSOR_STATUS('local','db_cur') >= 0 CLOSE db_cur; + IF CURSOR_STATUS('local','db_cur') >= -1 DEALLOCATE db_cur; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + END; + + PRINT '----------------------------------------------------------------------------------------------------'; + PRINT 'PROCESSING DATABASE [' + @CurrentDB + '] (' + CONVERT(NVARCHAR(10),@DBINDEX) + '/' + CONVERT(NVARCHAR(10),@DBCOUNT) + ')'; + PRINT 'STEP: Scan modules/tables/columns' + + CASE WHEN (@INCLUDEDATAVALUES = 1) THEN '/data values' ELSE '' END + + CASE WHEN (@REPLACEWITH IS NOT NULL) AND (LEN(@REPLACEWITH) > 0) THEN ' + replace handling (module/data plan)' ELSE '' END + + CASE WHEN (@DOREPLACEDATAVALUES = 1) THEN ' + data replace execution' ELSE '' END + + '.'; + + SET @SQLCommand = N' +BEGIN TRY + USE ' + QUOTENAME(@CurrentDB) + N'; + + DECLARE @sv NVARCHAR(100) = @pSEARCHVALUE; + DECLARE @svLIKE NVARCHAR(400) = REPLACE(REPLACE(REPLACE(@sv, N''['', N''[[]''), N''%'', N''[%]''), N''_'', N''[_]''); + DECLARE @rv NVARCHAR(100) = @pREPLACEWITH; + DECLARE @do BIT = @pDOREPLACE; + DECLARE @scanData BIT = @pINCLUDEDATAVALUES; + DECLARE @doDataReplace BIT = @pDOREPLACEDATAVALUES; + + -- 1) Modules (find) + INSERT INTO #TBDD_GET_DATABASE_OBJECT_RESULTS([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[COLUMN_NAME],[OBJECT_DEFINITION]) + SELECT + DB_NAME() AS [DATABASE_NAME], + o.[type_desc] AS [OBJECT_TYPE], + s.[name] AS [SCHEMA_NAME], + o.[name] AS [OBJECT_NAME], + NULL AS [COLUMN_NAME], + m.[definition] AS [OBJECT_DEFINITION] + FROM [sys].[sql_modules] m + JOIN [sys].[objects] o ON m.[object_id] = o.[object_id] + JOIN [sys].[schemas] s ON o.[schema_id] = s.[schema_id] + WHERE o.[type] COLLATE __COLLATION__ IN (N''P'',N''PC'',N''V'',N''FN'',N''TF'',N''IF'',N''TR'') + AND m.[definition] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + -- Optional: plan/execute replacement (modules only) + IF (@rv IS NOT NULL) AND (LEN(@rv) > 0) BEGIN + + IF (@do = 0) BEGIN + + INSERT INTO #TBDD_GET_DATABASE_OBJECT_REPLACELOG([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[OCCURRENCE_COUNT],[ACTION],[ERROR_MESSAGE]) + SELECT + DB_NAME(), + o.[type_desc], + s.[name], + o.[name], + CASE WHEN LEN(@sv) = 0 THEN 0 + ELSE (LEN(m.[definition]) - LEN(REPLACE(m.[definition] COLLATE __COLLATION__,@sv COLLATE __COLLATION__,N''''))) / NULLIF(LEN(@sv),0) + END, + N''PLANNED'', + NULL + FROM [sys].[sql_modules] m + JOIN [sys].[objects] o ON m.[object_id] = o.[object_id] + JOIN [sys].[schemas] s ON o.[schema_id] = s.[schema_id] + WHERE o.[type] COLLATE __COLLATION__ IN (N''P'',N''PC'',N''V'',N''FN'',N''TF'',N''IF'',N''TR'') + AND m.[definition] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + END ELSE BEGIN + + -- Ensure stable SET options for ALTER statements + SET ANSI_NULLS ON; + SET QUOTED_IDENTIFIER ON; + + DECLARE @object_id INT, + @type CHAR(2), + @typedesc NVARCHAR(60), + @schema NVARCHAR(128), + @name NVARCHAR(128), + @def NVARCHAR(MAX), + @newdef NVARCHAR(MAX), + @execdef NVARCHAR(MAX), + @u NVARCHAR(MAX), + @uClean NVARCHAR(MAX), + @cStart INT, + @cEnd INT, + @pos INT, + @occ INT; + + DECLARE cur CURSOR LOCAL FAST_FORWARD FOR + SELECT o.[object_id], o.[type], o.[type_desc], s.[name], o.[name], m.[definition] + FROM [sys].[sql_modules] m + JOIN [sys].[objects] o ON m.[object_id] = o.[object_id] + JOIN [sys].[schemas] s ON o.[schema_id] = s.[schema_id] + WHERE o.[type] COLLATE __COLLATION__ IN (N''P'',N''PC'',N''V'',N''FN'',N''TF'',N''IF'',N''TR'') + AND m.[definition] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + OPEN cur; + FETCH NEXT FROM cur INTO @object_id, @type, @typedesc, @schema, @name, @def; + + WHILE @@FETCH_STATUS = 0 + BEGIN + + SET @occ = + CASE WHEN LEN(@sv) = 0 THEN 0 + ELSE (LEN(@def) - LEN(REPLACE(@def COLLATE __COLLATION__,@sv COLLATE __COLLATION__,N''''))) / NULLIF(LEN(@sv),0) + END; + + SET @newdef = REPLACE(@def COLLATE __COLLATION__,@sv COLLATE __COLLATION__,@rv); + + IF (@occ = 0) OR (@newdef = @def) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_REPLACELOG([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[OCCURRENCE_COUNT],[ACTION],[ERROR_MESSAGE]) + VALUES (DB_NAME(),@typedesc,@schema,@name,@occ,N''SKIPPED'',NULL); + + FETCH NEXT FROM cur INTO @object_id, @type, @typedesc, @schema, @name, @def; + CONTINUE; + END; + + SET @execdef = @newdef; + SET @u = UPPER(@execdef COLLATE __COLLATION__); + + -- F05: Strip comments from @u to avoid matching CREATE inside comments. + -- Replaces comment text with spaces to preserve character positions. + SET @uClean = @u; + -- Strip multi-line comments /* ... */ + SET @cStart = CHARINDEX(N''/*'', @uClean COLLATE __COLLATION__); + WHILE @cStart > 0 BEGIN + SET @cEnd = CHARINDEX(N''*/'', @uClean COLLATE __COLLATION__, @cStart + 2); + IF @cEnd > 0 + SET @uClean = LEFT(@uClean, @cStart - 1) + REPLICATE(N'' '', @cEnd - @cStart + 2) + SUBSTRING(@uClean, @cEnd + 2, LEN(@uClean)); + ELSE + BREAK; + SET @cStart = CHARINDEX(N''/*'', @uClean COLLATE __COLLATION__, @cStart + 1); + END; + -- Strip single-line comments -- ... + SET @cStart = CHARINDEX(N''--'', @uClean COLLATE __COLLATION__); + WHILE @cStart > 0 BEGIN + SET @cEnd = CHARINDEX(NCHAR(10), @uClean, @cStart); + IF @cEnd > 0 + SET @uClean = LEFT(@uClean, @cStart - 1) + REPLICATE(N'' '', @cEnd - @cStart) + SUBSTRING(@uClean, @cEnd, LEN(@uClean)); + ELSE BEGIN + SET @uClean = LEFT(@uClean, @cStart - 1) + REPLICATE(N'' '', LEN(@uClean) - @cStart + 1); + BREAK; + END; + SET @cStart = CHARINDEX(N''--'', @uClean COLLATE __COLLATION__, @cStart + 1); + END; + + -- If not already CREATE OR ALTER, try to replace first CREATE with ALTER for supported object kinds. + IF PATINDEX(N''%CREATE OR ALTER%'' COLLATE __COLLATION__, @uClean COLLATE __COLLATION__) = 0 BEGIN + + SET @pos = 0; + + IF @type COLLATE __COLLATION__ IN (N''P'',N''PC'') BEGIN + SET @pos = PATINDEX(N''%CREATE%PROCEDURE%'' COLLATE __COLLATION__, @uClean COLLATE __COLLATION__); + IF @pos = 0 SET @pos = PATINDEX(N''%CREATE%PROC%'' COLLATE __COLLATION__, @uClean COLLATE __COLLATION__); + END + ELSE IF @type COLLATE __COLLATION__ = N''V'' BEGIN + SET @pos = PATINDEX(N''%CREATE%VIEW%'' COLLATE __COLLATION__, @uClean COLLATE __COLLATION__); + END + ELSE IF @type COLLATE __COLLATION__ IN (N''FN'',N''TF'',N''IF'') BEGIN + SET @pos = PATINDEX(N''%CREATE%FUNCTION%'' COLLATE __COLLATION__, @uClean COLLATE __COLLATION__); + END + ELSE IF @type COLLATE __COLLATION__ = N''TR'' BEGIN + SET @pos = PATINDEX(N''%CREATE%TRIGGER%'' COLLATE __COLLATION__, @uClean COLLATE __COLLATION__); + END; + + IF (@pos > 0) BEGIN + SET @execdef = STUFF(@execdef COLLATE __COLLATION__,@pos,6,N''ALTER'' COLLATE __COLLATION__); -- CREATE(6) -> ALTER + END; + + END; + + BEGIN TRY + EXEC (@execdef); + + INSERT INTO #TBDD_GET_DATABASE_OBJECT_REPLACELOG([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[OCCURRENCE_COUNT],[ACTION],[ERROR_MESSAGE]) + VALUES (DB_NAME(),@typedesc,@schema,@name,@occ,N''UPDATED'',NULL); + + END TRY BEGIN CATCH + + INSERT INTO #TBDD_GET_DATABASE_OBJECT_REPLACELOG([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[OCCURRENCE_COUNT],[ACTION],[ERROR_MESSAGE]) + VALUES (DB_NAME(),@typedesc,@schema,@name,@occ,N''ERROR'',ERROR_MESSAGE() + N'' (Proc: '' + ISNULL(ERROR_PROCEDURE(),N'''') + N'' / Line: '' + CONVERT(NVARCHAR(10),ERROR_LINE()) + N'')''); + + END CATCH; + + FETCH NEXT FROM cur INTO @object_id, @type, @typedesc, @schema, @name, @def; + + END; + + CLOSE cur; + DEALLOCATE cur; + + END; + + END; + + -- 2) Tables by name + INSERT INTO #TBDD_GET_DATABASE_OBJECT_RESULTS([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[COLUMN_NAME],[OBJECT_DEFINITION]) + SELECT + DB_NAME(), + N''TABLE'', + s.[name], + t.[name], + NULL, + NULL + FROM [sys].[tables] t + JOIN [sys].[schemas] s ON t.[schema_id] = s.[schema_id] + WHERE t.[name] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + -- 3) Columns by name + INSERT INTO #TBDD_GET_DATABASE_OBJECT_RESULTS([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[COLUMN_NAME],[OBJECT_DEFINITION]) + SELECT + DB_NAME(), + N''COLUMN'', + s.[name], + t.[name], + c.[name], + NULL + FROM [sys].[columns] c + JOIN [sys].[tables] t ON c.[object_id] = t.[object_id] + JOIN [sys].[schemas] s ON t.[schema_id] = s.[schema_id] + WHERE c.[name] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + -- 4) Data values in text-like table columns (optional) + IF (@scanData = 1) BEGIN + + DECLARE @dSchema SYSNAME, + @dTable SYSNAME, + @dColumn SYSNAME, + @dSystemType INT, + @dSQL NVARCHAR(MAX), + @dUpdateSQL NVARCHAR(MAX), + @dMatchCount BIGINT, + @dUpdatedRows INT, + @dSample NVARCHAR(4000); + + DECLARE cur_data_cols CURSOR LOCAL FAST_FORWARD FOR + SELECT + s.[name] AS [SCHEMA_NAME], + t.[name] AS [TABLE_NAME], + c.[name] AS [COLUMN_NAME], + c.[system_type_id] AS [SYSTEM_TYPE_ID] + FROM [sys].[tables] t + JOIN [sys].[schemas] s ON t.[schema_id] = s.[schema_id] + JOIN [sys].[columns] c ON t.[object_id] = c.[object_id] + WHERE t.[is_ms_shipped] = 0 + AND c.[is_computed] = 0 + AND TYPE_NAME(c.[system_type_id]) COLLATE __COLLATION__ IN (N''varchar'',N''nvarchar'',N''char'',N''nchar'',N''text'',N''ntext''); + + OPEN cur_data_cols; + FETCH NEXT FROM cur_data_cols INTO @dSchema, @dTable, @dColumn, @dSystemType; + + WHILE @@FETCH_STATUS = 0 + BEGIN + + BEGIN TRY + + SET @dMatchCount = 0; + SET @dUpdatedRows = 0; + SET @dSample = NULL; + + SET @dSQL = N'' +SELECT + @pMatchCount = COUNT_BIG(1), + @pSample = MIN(LEFT(TRY_CONVERT(NVARCHAR(MAX),'' + QUOTENAME(@dColumn) + N'') COLLATE __COLLATION__,4000)) +FROM '' + QUOTENAME(@dSchema) + N''.'' + QUOTENAME(@dTable) + N'' WITH (NOLOCK) +WHERE TRY_CONVERT(NVARCHAR(MAX),'' + QUOTENAME(@dColumn) + N'') COLLATE __COLLATION__ LIKE N''''%'''' + (@pSVLIKE COLLATE __COLLATION__) + N''''%'''';''; + + EXEC sp_executesql + @dSQL, + N''@pSV NVARCHAR(100), @pSVLIKE NVARCHAR(400), @pMatchCount BIGINT OUTPUT, @pSample NVARCHAR(4000) OUTPUT'', + @pSV = @sv, + @pSVLIKE = @svLIKE, + @pMatchCount = @dMatchCount OUTPUT, + @pSample = @dSample OUTPUT; + + IF (ISNULL(@dMatchCount,0) > 0) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAMATCHES([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[SAMPLE_VALUE]) + VALUES ( + DB_NAME(), + @dSchema, + @dTable, + @dColumn, + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + @dSample + ); + + IF (@rv IS NOT NULL) AND (LEN(@rv) > 0) BEGIN + + IF (@doDataReplace = 0) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[UPDATED_ROWS],[ACTION],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + @dSchema, + @dTable, + @dColumn, + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + 0, + N''PLANNED'', + NULL + ); + END + ELSE BEGIN + IF (@sv = @rv) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[UPDATED_ROWS],[ACTION],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + @dSchema, + @dTable, + @dColumn, + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + 0, + N''SKIPPED'', + N''@pSEARCHVALUE equals @pREPLACEWITH'' + ); + END + ELSE BEGIN + IF @dSystemType IN (35,99) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[UPDATED_ROWS],[ACTION],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + @dSchema, + @dTable, + @dColumn, + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + 0, + N''SKIPPED'', + N''Data type TEXT/NTEXT not supported for replace execution.'' + ); + END + ELSE BEGIN + SET @dUpdateSQL = N'' +UPDATE '' + QUOTENAME(@dSchema) + N''.'' + QUOTENAME(@dTable) + N'' +SET '' + QUOTENAME(@dColumn) + N'' = REPLACE(TRY_CONVERT(NVARCHAR(MAX),'' + QUOTENAME(@dColumn) + N'') COLLATE __COLLATION__, @pSV COLLATE __COLLATION__, @pRV COLLATE __COLLATION__) +WHERE TRY_CONVERT(NVARCHAR(MAX),'' + QUOTENAME(@dColumn) + N'') COLLATE __COLLATION__ LIKE N''''%'''' + (@pSVLIKE COLLATE __COLLATION__) + N''''%''''; +SET @pUpdatedRows = @@ROWCOUNT;''; + + EXEC sp_executesql + @dUpdateSQL, + N''@pSV NVARCHAR(100), @pSVLIKE NVARCHAR(400), @pRV NVARCHAR(100), @pUpdatedRows INT OUTPUT'', + @pSV = @sv, + @pSVLIKE = @svLIKE, + @pRV = @rv, + @pUpdatedRows = @dUpdatedRows OUTPUT; + + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[UPDATED_ROWS],[ACTION],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + @dSchema, + @dTable, + @dColumn, + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + ISNULL(@dUpdatedRows,0), + N''UPDATED'', + NULL + ); + END; + END; + END; + + END; + END; + + END TRY BEGIN CATCH + + INSERT INTO #TBDD_GET_DATABASE_OBJECT_ERRORS([DATABASE_NAME],[ERROR_NUMBER],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + ERROR_NUMBER(), + N''DATA_SCAN ['' + @dSchema + N''.'' + @dTable + N''.'' + @dColumn + N'']: '' + + ERROR_MESSAGE() + + N'' (Proc: '' + ISNULL(ERROR_PROCEDURE(),N'''') + N'' / Line: '' + CONVERT(NVARCHAR(10),ERROR_LINE()) + N'')'' + ); + + IF (ISNULL(@dMatchCount,0) > 0) AND (@rv IS NOT NULL) AND (LEN(@rv) > 0) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[UPDATED_ROWS],[ACTION],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + ISNULL(@dSchema,N''''), + ISNULL(@dTable,N''''), + ISNULL(@dColumn,N''''), + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + 0, + N''ERROR'', + ERROR_MESSAGE() + N'' (Proc: '' + ISNULL(ERROR_PROCEDURE(),N'''') + N'' / Line: '' + CONVERT(NVARCHAR(10),ERROR_LINE()) + N'')'' + ); + END; + + END CATCH; + + FETCH NEXT FROM cur_data_cols INTO @dSchema, @dTable, @dColumn, @dSystemType; + END; + + CLOSE cur_data_cols; + DEALLOCATE cur_data_cols; + + END; + +END TRY BEGIN CATCH + INSERT INTO #TBDD_GET_DATABASE_OBJECT_ERRORS([DATABASE_NAME],[ERROR_NUMBER],[ERROR_MESSAGE]) + VALUES ( + N''' + REPLACE(@CurrentDB,'''','''''') + N''', + ERROR_NUMBER(), + ERROR_MESSAGE() + N'' (Proc: '' + ISNULL(ERROR_PROCEDURE(),N'''') + N'' / Line: '' + CONVERT(NVARCHAR(10),ERROR_LINE()) + N'')'' + ); +END CATCH;'; + + IF (@DOREPLACE = 0) AND (@DOREPLACEDATAVALUES = 0) BEGIN + SET @SQLCommand = N' +BEGIN TRY + USE ' + QUOTENAME(@CurrentDB) + N'; + + DECLARE @sv NVARCHAR(100) = @pSEARCHVALUE; + DECLARE @svLIKE NVARCHAR(400) = REPLACE(REPLACE(REPLACE(@sv, N''['', N''[[]''), N''%'', N''[%]''), N''_'', N''[_]''); + DECLARE @rv NVARCHAR(100) = @pREPLACEWITH; + DECLARE @scanData BIT = @pINCLUDEDATAVALUES; + + -- 1) Modules (find) + INSERT INTO #TBDD_GET_DATABASE_OBJECT_RESULTS([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[COLUMN_NAME],[OBJECT_DEFINITION]) + SELECT + DB_NAME(), + o.[type_desc], + s.[name], + o.[name], + NULL, + m.[definition] + FROM [sys].[sql_modules] m + JOIN [sys].[objects] o ON m.[object_id] = o.[object_id] + JOIN [sys].[schemas] s ON o.[schema_id] = s.[schema_id] + WHERE o.[type] COLLATE __COLLATION__ IN (N''P'',N''PC'',N''V'',N''FN'',N''TF'',N''IF'',N''TR'') + AND m.[definition] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + -- Optional: replace plan (modules only) + IF (@rv IS NOT NULL) AND (LEN(@rv) > 0) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_REPLACELOG([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[OCCURRENCE_COUNT],[ACTION],[ERROR_MESSAGE]) + SELECT + DB_NAME(), + o.[type_desc], + s.[name], + o.[name], + CASE WHEN LEN(@sv) = 0 THEN 0 + ELSE (LEN(m.[definition]) - LEN(REPLACE(m.[definition] COLLATE __COLLATION__,@sv COLLATE __COLLATION__,N''''))) / NULLIF(LEN(@sv),0) + END, + N''PLANNED'', + NULL + FROM [sys].[sql_modules] m + JOIN [sys].[objects] o ON m.[object_id] = o.[object_id] + JOIN [sys].[schemas] s ON o.[schema_id] = s.[schema_id] + WHERE o.[type] COLLATE __COLLATION__ IN (N''P'',N''PC'',N''V'',N''FN'',N''TF'',N''IF'',N''TR'') + AND m.[definition] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + END; + + -- 2) Tables by name + INSERT INTO #TBDD_GET_DATABASE_OBJECT_RESULTS([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[COLUMN_NAME],[OBJECT_DEFINITION]) + SELECT + DB_NAME(), + N''TABLE'', + s.[name], + t.[name], + NULL, + NULL + FROM [sys].[tables] t + JOIN [sys].[schemas] s ON t.[schema_id] = s.[schema_id] + WHERE t.[name] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + -- 3) Columns by name + INSERT INTO #TBDD_GET_DATABASE_OBJECT_RESULTS([DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[COLUMN_NAME],[OBJECT_DEFINITION]) + SELECT + DB_NAME(), + N''COLUMN'', + s.[name], + t.[name], + c.[name], + NULL + FROM [sys].[columns] c + JOIN [sys].[tables] t ON c.[object_id] = t.[object_id] + JOIN [sys].[schemas] s ON t.[schema_id] = s.[schema_id] + WHERE c.[name] COLLATE __COLLATION__ LIKE N''%'' + (@svLIKE COLLATE __COLLATION__) + N''%''; + + -- 4) Data values in text-like table columns (optional) + IF (@scanData = 1) BEGIN + + DECLARE @dSchema SYSNAME, + @dTable SYSNAME, + @dColumn SYSNAME, + @dSQL NVARCHAR(MAX), + @dMatchCount BIGINT, + @dSample NVARCHAR(4000); + + DECLARE cur_data_cols CURSOR LOCAL FAST_FORWARD FOR + SELECT + s.[name] AS [SCHEMA_NAME], + t.[name] AS [TABLE_NAME], + c.[name] AS [COLUMN_NAME] + FROM [sys].[tables] t + JOIN [sys].[schemas] s ON t.[schema_id] = s.[schema_id] + JOIN [sys].[columns] c ON t.[object_id] = c.[object_id] + WHERE t.[is_ms_shipped] = 0 + AND c.[is_computed] = 0 + AND TYPE_NAME(c.[system_type_id]) COLLATE __COLLATION__ IN (N''varchar'',N''nvarchar'',N''char'',N''nchar'',N''text'',N''ntext''); + + OPEN cur_data_cols; + FETCH NEXT FROM cur_data_cols INTO @dSchema, @dTable, @dColumn; + + WHILE @@FETCH_STATUS = 0 + BEGIN + BEGIN TRY + SET @dMatchCount = 0; + SET @dSample = NULL; + + SET @dSQL = N'' +SELECT + @pMatchCount = COUNT_BIG(1), + @pSample = MIN(LEFT(TRY_CONVERT(NVARCHAR(MAX),'' + QUOTENAME(@dColumn) + N'') COLLATE __COLLATION__,4000)) +FROM '' + QUOTENAME(@dSchema) + N''.'' + QUOTENAME(@dTable) + N'' WITH (NOLOCK) +WHERE TRY_CONVERT(NVARCHAR(MAX),'' + QUOTENAME(@dColumn) + N'') COLLATE __COLLATION__ LIKE N''''%'''' + (@pSVLIKE COLLATE __COLLATION__) + N''''%'''';''; + + EXEC sp_executesql + @dSQL, + N''@pSV NVARCHAR(100), @pSVLIKE NVARCHAR(400), @pMatchCount BIGINT OUTPUT, @pSample NVARCHAR(4000) OUTPUT'', + @pSV = @sv, + @pSVLIKE = @svLIKE, + @pMatchCount = @dMatchCount OUTPUT, + @pSample = @dSample OUTPUT; + + IF (ISNULL(@dMatchCount,0) > 0) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAMATCHES([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[SAMPLE_VALUE]) + VALUES ( + DB_NAME(), + @dSchema, + @dTable, + @dColumn, + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + @dSample + ); + + IF (@rv IS NOT NULL) AND (LEN(@rv) > 0) BEGIN + INSERT INTO #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG([DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME],[MATCH_COUNT],[UPDATED_ROWS],[ACTION],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + @dSchema, + @dTable, + @dColumn, + CONVERT(INT,CASE WHEN @dMatchCount > 2147483647 THEN 2147483647 ELSE @dMatchCount END), + 0, + N''PLANNED'', + NULL + ); + END; + END; + END TRY BEGIN CATCH + INSERT INTO #TBDD_GET_DATABASE_OBJECT_ERRORS([DATABASE_NAME],[ERROR_NUMBER],[ERROR_MESSAGE]) + VALUES ( + DB_NAME(), + ERROR_NUMBER(), + N''DATA_SCAN ['' + @dSchema + N''.'' + @dTable + N''.'' + @dColumn + N'']: '' + + ERROR_MESSAGE() + + N'' (Proc: '' + ISNULL(ERROR_PROCEDURE(),N'''') + N'' / Line: '' + CONVERT(NVARCHAR(10),ERROR_LINE()) + N'')'' + ); + END CATCH; + + FETCH NEXT FROM cur_data_cols INTO @dSchema, @dTable, @dColumn; + END; + + CLOSE cur_data_cols; + DEALLOCATE cur_data_cols; + END; + +END TRY BEGIN CATCH + INSERT INTO #TBDD_GET_DATABASE_OBJECT_ERRORS([DATABASE_NAME],[ERROR_NUMBER],[ERROR_MESSAGE]) + VALUES ( + N''' + REPLACE(@CurrentDB,'''','''''') + N''', + ERROR_NUMBER(), + ERROR_MESSAGE() + N'' (Proc: '' + ISNULL(ERROR_PROCEDURE(),N'''') + N'' / Line: '' + CONVERT(NVARCHAR(10),ERROR_LINE()) + N'')'' + ); +END CATCH;'; + END; + + SET @SQLCommand = REPLACE(@SQLCommand,N'__COLLATION__',@CurrentDBCollation); + + EXEC sp_executesql + @SQLCommand, + N'@pSEARCHVALUE NVARCHAR(100), @pREPLACEWITH NVARCHAR(100), @pDOREPLACE BIT, @pINCLUDEDATAVALUES BIT, @pDOREPLACEDATAVALUES BIT', + @pSEARCHVALUE = @SEARCHVALUE, + @pREPLACEWITH = @REPLACEWITH, + @pDOREPLACE = @DOREPLACE, + @pINCLUDEDATAVALUES = @INCLUDEDATAVALUES, + @pDOREPLACEDATAVALUES = @DOREPLACEDATAVALUES; + + -- Per-DB summary + DECLARE @cntModules INT = 0, + @cntTables INT = 0, + @cntColumns INT = 0, + @cntDataColumns INT = 0, + @cntDataRows BIGINT = 0, + @cntDataPlan INT = 0, + @cntDataUpd INT = 0, + @cntDataSkip INT = 0, + @cntDataErr INT = 0, + @cntDbErrors INT = 0; + + SELECT @cntTables = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_RESULTS WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [OBJECT_TYPE] COLLATE DATABASE_DEFAULT = N'TABLE'; + SELECT @cntColumns = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_RESULTS WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [OBJECT_TYPE] COLLATE DATABASE_DEFAULT = N'COLUMN'; + SELECT @cntModules = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_RESULTS WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [OBJECT_TYPE] COLLATE DATABASE_DEFAULT NOT IN (N'TABLE',N'COLUMN'); + SELECT @cntDataColumns = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAMATCHES WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB; + SELECT @cntDataRows = ISNULL(SUM(CONVERT(BIGINT,[MATCH_COUNT])),0) FROM #TBDD_GET_DATABASE_OBJECT_DATAMATCHES WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB; + SELECT @cntDataPlan = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'PLANNED'; + SELECT @cntDataUpd = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'UPDATED'; + SELECT @cntDataSkip = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'SKIPPED'; + SELECT @cntDataErr = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'ERROR'; + SELECT @cntDbErrors = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_ERRORS WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB; + + PRINT 'RESULT: [' + @CurrentDB + '] Modules=' + CONVERT(NVARCHAR(20),@cntModules) + + ' Tables=' + CONVERT(NVARCHAR(20),@cntTables) + + ' Columns=' + CONVERT(NVARCHAR(20),@cntColumns) + + ' DataCols=' + CONVERT(NVARCHAR(20),@cntDataColumns) + + ' DataRows=' + CONVERT(NVARCHAR(20),@cntDataRows) + + ' Errors=' + CONVERT(NVARCHAR(20),@cntDbErrors); + + IF (@REPLACEWITH IS NOT NULL) AND (LEN(@REPLACEWITH) > 0) BEGIN + + DECLARE @cntPlanned INT = 0, + @cntUpdated INT = 0, + @cntSkipped INT = 0, + @cntReplErr INT = 0; + + SELECT @cntPlanned = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'PLANNED'; + SELECT @cntUpdated = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'UPDATED'; + SELECT @cntSkipped = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'SKIPPED'; + SELECT @cntReplErr = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [DATABASE_NAME] COLLATE DATABASE_DEFAULT = @CurrentDB AND [ACTION] COLLATE DATABASE_DEFAULT = N'ERROR'; + + PRINT 'REPLACE: [' + @CurrentDB + '] Planned=' + CONVERT(NVARCHAR(20),@cntPlanned) + + ' Updated=' + CONVERT(NVARCHAR(20),@cntUpdated) + + ' Skipped=' + CONVERT(NVARCHAR(20),@cntSkipped) + + ' Errors=' + CONVERT(NVARCHAR(20),@cntReplErr); + + PRINT 'DATA REPLACE: [' + @CurrentDB + '] Planned=' + CONVERT(NVARCHAR(20),@cntDataPlan) + + ' Updated=' + CONVERT(NVARCHAR(20),@cntDataUpd) + + ' Skipped=' + CONVERT(NVARCHAR(20),@cntDataSkip) + + ' Errors=' + CONVERT(NVARCHAR(20),@cntDataErr); + + END; + + FETCH NEXT FROM db_cur INTO @CurrentDB; + + END; + + CLOSE db_cur; + DEALLOCATE db_cur; + + END TRY BEGIN CATCH + + IF CURSOR_STATUS('local','db_cur') >= 0 BEGIN + CLOSE db_cur; + END; + + IF CURSOR_STATUS('local','db_cur') >= -1 BEGIN + DEALLOCATE db_cur; + END; + + SELECT + @return_status = ERROR_NUMBER(), + @return_error_text = ERROR_MESSAGE() + ' (Proc: ' + ISNULL(ERROR_PROCEDURE(),'') + ' / Line: ' + CONVERT(NVARCHAR(10),ERROR_LINE()) + ')'; + SET @return_status_text = 'ERROR: ' + @return_error_text; + PRINT @return_status_text; + RAISERROR(@return_status_text,16,1); + RETURN @return_status; + + END CATCH; + ---------------------------------------------------------------------------------------------------------------------------- + + --================================================-- Global summary --====================================================-- + DECLARE @DBCOUNT_FINAL INT = (SELECT COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DB_LIST); + + DECLARE @TOTAL_MODULES INT = 0, + @TOTAL_TABLES INT = 0, + @TOTAL_COLUMNS INT = 0, + @TOTAL_DATA_COLUMNS INT = 0, + @TOTAL_DATA_ROWS BIGINT = 0, + @TOTAL_ERRORS INT = 0, + @TOTAL_REPLACE_PLANNED INT = 0, + @TOTAL_REPLACE_UPDATED INT = 0, + @TOTAL_REPLACE_SKIPPED INT = 0, + @TOTAL_REPLACE_ERRORS INT = 0, + @TOTAL_DATA_REPLACE_PLANNED INT = 0, + @TOTAL_DATA_REPLACE_UPDATED INT = 0, + @TOTAL_DATA_REPLACE_SKIPPED INT = 0, + @TOTAL_DATA_REPLACE_ERRORS INT = 0, + @TOTAL_DATA_REPLACE_ROWS BIGINT = 0; + + SELECT @TOTAL_TABLES = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_RESULTS WHERE [OBJECT_TYPE] COLLATE DATABASE_DEFAULT = N'TABLE'; + SELECT @TOTAL_COLUMNS = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_RESULTS WHERE [OBJECT_TYPE] COLLATE DATABASE_DEFAULT = N'COLUMN'; + SELECT @TOTAL_MODULES = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_RESULTS WHERE [OBJECT_TYPE] COLLATE DATABASE_DEFAULT NOT IN (N'TABLE',N'COLUMN'); + SELECT @TOTAL_DATA_COLUMNS = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAMATCHES; + SELECT @TOTAL_DATA_ROWS = ISNULL(SUM(CONVERT(BIGINT,[MATCH_COUNT])),0) FROM #TBDD_GET_DATABASE_OBJECT_DATAMATCHES; + SELECT @TOTAL_ERRORS = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_ERRORS; + + SELECT @TOTAL_REPLACE_PLANNED = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'PLANNED'; + SELECT @TOTAL_REPLACE_UPDATED = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'UPDATED'; + SELECT @TOTAL_REPLACE_SKIPPED = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'SKIPPED'; + SELECT @TOTAL_REPLACE_ERRORS = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'ERROR'; + SELECT @TOTAL_DATA_REPLACE_PLANNED = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'PLANNED'; + SELECT @TOTAL_DATA_REPLACE_UPDATED = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'UPDATED'; + SELECT @TOTAL_DATA_REPLACE_SKIPPED = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'SKIPPED'; + SELECT @TOTAL_DATA_REPLACE_ERRORS = COUNT(*) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'ERROR'; + SELECT @TOTAL_DATA_REPLACE_ROWS = ISNULL(SUM(CONVERT(BIGINT,[UPDATED_ROWS])),0) FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG WHERE [ACTION] COLLATE DATABASE_DEFAULT = N'UPDATED'; + + PRINT '----------------------------------------------------------------------------------------------------'; + PRINT 'SUMMARY: Databases processed: ' + CONVERT(NVARCHAR(20),@DBCOUNT_FINAL); + PRINT 'SUMMARY: Modules=' + CONVERT(NVARCHAR(20),@TOTAL_MODULES) + + ' Tables=' + CONVERT(NVARCHAR(20),@TOTAL_TABLES) + + ' Columns=' + CONVERT(NVARCHAR(20),@TOTAL_COLUMNS) + + ' Errors=' + CONVERT(NVARCHAR(20),@TOTAL_ERRORS); + PRINT 'SUMMARY: DataColumnsWithMatches=' + CONVERT(NVARCHAR(20),@TOTAL_DATA_COLUMNS) + + ' DataRowsMatched=' + CONVERT(NVARCHAR(20),@TOTAL_DATA_ROWS); + + IF (@REPLACEWITH IS NOT NULL) AND (LEN(@REPLACEWITH) > 0) BEGIN + PRINT 'SUMMARY: Replace Planned=' + CONVERT(NVARCHAR(20),@TOTAL_REPLACE_PLANNED) + + ' Updated=' + CONVERT(NVARCHAR(20),@TOTAL_REPLACE_UPDATED) + + ' Skipped=' + CONVERT(NVARCHAR(20),@TOTAL_REPLACE_SKIPPED) + + ' Errors=' + CONVERT(NVARCHAR(20),@TOTAL_REPLACE_ERRORS); + PRINT 'SUMMARY: DataReplace Planned=' + CONVERT(NVARCHAR(20),@TOTAL_DATA_REPLACE_PLANNED) + + ' Updated=' + CONVERT(NVARCHAR(20),@TOTAL_DATA_REPLACE_UPDATED) + + ' Skipped=' + CONVERT(NVARCHAR(20),@TOTAL_DATA_REPLACE_SKIPPED) + + ' Errors=' + CONVERT(NVARCHAR(20),@TOTAL_DATA_REPLACE_ERRORS) + + ' UpdatedRows=' + CONVERT(NVARCHAR(20),@TOTAL_DATA_REPLACE_ROWS); + END; + + PRINT 'SUMMARY: Duration (sec): ' + CONVERT(NVARCHAR(20),DATEDIFF(SECOND,@START_TIME,SYSDATETIME())); + PRINT '----------------------------------------------------------------------------------------------------'; + ---------------------------------------------------------------------------------------------------------------------------- + + --================================================-- Output resultsets --=================================================-- + SELECT + [DATABASE_NAME], + [OBJECT_TYPE], + [SCHEMA_NAME], + [OBJECT_NAME], + [COLUMN_NAME], + [OBJECT_DEFINITION] + FROM #TBDD_GET_DATABASE_OBJECT_RESULTS + ORDER BY [DATABASE_NAME],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME],[COLUMN_NAME]; + + SELECT + [DATABASE_NAME], + [SCHEMA_NAME], + [TABLE_NAME], + [COLUMN_NAME], + [MATCH_COUNT], + [SAMPLE_VALUE] + FROM #TBDD_GET_DATABASE_OBJECT_DATAMATCHES + ORDER BY [DATABASE_NAME],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME]; + + SELECT + [DATABASE_NAME], + [OBJECT_TYPE], + [SCHEMA_NAME], + [OBJECT_NAME], + [OCCURRENCE_COUNT], + [ACTION], + [ERROR_MESSAGE] + FROM #TBDD_GET_DATABASE_OBJECT_REPLACELOG + ORDER BY [DATABASE_NAME],[ACTION],[OBJECT_TYPE],[SCHEMA_NAME],[OBJECT_NAME]; + + SELECT + [DATABASE_NAME], + [SCHEMA_NAME], + [TABLE_NAME], + [COLUMN_NAME], + [MATCH_COUNT], + [UPDATED_ROWS], + [ACTION], + [ERROR_MESSAGE] + FROM #TBDD_GET_DATABASE_OBJECT_DATAREPLACELOG + ORDER BY [DATABASE_NAME],[ACTION],[SCHEMA_NAME],[TABLE_NAME],[COLUMN_NAME]; + + SELECT + [DATABASE_NAME], + [ERROR_NUMBER], + [ERROR_MESSAGE] + FROM #TBDD_GET_DATABASE_OBJECT_ERRORS + ORDER BY [DATABASE_NAME]; + ---------------------------------------------------------------------------------------------------------------------------- + + SET @return_status_text = 'END PROCEDURE [' + @MY_PROCEDURE_NAME + '] @ ' + CONVERT(varchar(50),GETDATE(),120); + + PRINT ''; + PRINT @return_status_text; + PRINT '===================================================================================================='; + + Return @return_status; + +END; +GO