diff --git a/DD-VMP02-DB01/SQL-Server/Prozeduren/[PRDD_SET_STATUS_IN_THIRDPARTY_DB].sql b/DD-VMP02-DB01/SQL-Server/Prozeduren/[PRDD_SET_STATUS_IN_THIRDPARTY_DB].sql index a7eccfb..80ae443 100644 --- a/DD-VMP02-DB01/SQL-Server/Prozeduren/[PRDD_SET_STATUS_IN_THIRDPARTY_DB].sql +++ b/DD-VMP02-DB01/SQL-Server/Prozeduren/[PRDD_SET_STATUS_IN_THIRDPARTY_DB].sql @@ -1,6 +1,6 @@ -- [PRDD_SET_STATUS_IN_THIRDPARTY_DB] -- ================================================================= --- Set DMS status info into a text field +-- Set status info into a text field -- -- Returns: 1 = SUCCESS; 0 = FAILED -- ================================================================= @@ -22,19 +22,21 @@ SET QUOTED_IDENTIFIER ON GO CREATE OR ALTER PROCEDURE [PRDD_SET_STATUS_IN_THIRDPARTY_DB]( - @pTARGET_DB NVARCHAR(256) = '[DD_CWLDATEN_DDVP]', -- Give target DB name (without schema!) - @pTARGET_SCHEMA NVARCHAR(256) = '[dbo]', -- Give target DB schema - @pTARGET_TABLE NVARCHAR(256) = '[t025]', -- Give target DB table - @pTARGET_COLUMN NVARCHAR(256) = '[c069]', -- Give target DB column - @pREF_DOC_TYPE NVARCHAR(256) = 'Ausgangsrechnung', -- Give REF_DOC_TYPE, eg.: Ausgangsangebot, Ausgangsauftrag, Ausgangslieferschein, Ausgangsrechnung (ONLY FOR LOGGING PURPOSE!) - @pREF_DOC_NR_COLUMN NVARCHAR(256) = '[c055]', -- Give the column where the REF_DOC_NR is stored (eg. WINLINE: Ausgangsangebot=[c043], Ausgangsauftrag=[c044], Ausgangslieferschein=[c045], ) - @pREF_DOC_NR NVARCHAR(256), -- Give REF_DOC_NR, like 'ARE-20234187' or 'AANG-20241060' - @pADDITIONAL_WHERE NVARCHAR(256) = '', -- Give an additional WHERE clause like ' AND [COLUMN] IS NOT NULL' - @pSTATUS_TEXT NVARCHAR(256), -- Give text to write in @pTARGET_COLUMN - @pSTATUS_TEXT_MAX_LEN INT = 60, -- Give the max lenght of the target field for the status text - @pUSERNAME NVARCHAR(50) = '[PRDD_SET_STATUS_IN_THIRDPARTY_DB]', -- Give the user of the Frontend call, for the logging - @pOVERWRITE BIT = 0, -- Set overwrite for @pTARGET_COLUMN: 0 = concat; 1 = overwrite - @pLOGLEVEL NVARCHAR(25) = 'ERROR' -- Set Loglevel (ERROR or INFO) to be written to table [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] + @pTARGET_DB NVARCHAR(256) = '[DD_CWLDATEN_DDVP]', -- Give target DB name (without schema!) + @pTARGET_SCHEMA NVARCHAR(256) = '[dbo]', -- Give target DB schema + @pTARGET_TABLE NVARCHAR(256) = '[t025]', -- Give target DB table + @pTARGET_COLUMN NVARCHAR(256) = '[c069]', -- Give target DB column + @pTARGET_COLUMN_TYPE NVARCHAR(256) = 'NVARCHAR', -- Give target DB column type eg. INT or NVARCHAR + @pREF_DOC_TYPE NVARCHAR(256) = 'Ausgangsrechnung', -- Give REF_DOC_TYPE, eg.: Ausgangsangebot, Ausgangsauftrag, Ausgangslieferschein, Ausgangsrechnung (ONLY FOR LOGGING PURPOSE!) + @pREF_DOC_NR_COLUMN NVARCHAR(256) = '[c055]', -- Give the column where the REF_DOC_NR is stored (eg. WINLINE: Ausgangsangebot=[c043], Ausgangsauftrag=[c044], Ausgangslieferschein=[c045], ) + @pREF_DOC_NR NVARCHAR(256), -- Give REF_DOC_NR, like 'ARE-20234187' or 'AANG-20241060' + @pADDITIONAL_WHERE NVARCHAR(256) = '', -- Give an additional WHERE clause like ' AND [COLUMN] IS NOT NULL' + @pSTATUS_VALUE NVARCHAR(256), -- Give text to write in @pTARGET_COLUMN + @pSTATUS_VALUE_MAX_LEN INT = 60, -- Give the max lenght of the target field for the status text + @pSTATUS_VALUE_DELIMITER NVARCHAR(3) = '; ', -- Give the separator to concat multiple status values, like "Text1; Text2; ..." + @pUSERNAME NVARCHAR(50) = '[PRDD_SET_STATUS_IN_THIRDPARTY_DB]', -- Give the user of the Frontend call, for the logging + @pOVERWRITE BIT = 0, -- Set overwrite for @pTARGET_COLUMN: 0 = concat; 1 = overwrite + @pLOGLEVEL NVARCHAR(25) = 'ERROR' -- Set Loglevel (ERROR or INFO) to be written to table [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG] ) AS BEGIN TRY @@ -46,12 +48,14 @@ BEGIN TRY @TARGET_SCHEMA NVARCHAR(256) = @pTARGET_SCHEMA, @TARGET_TABLE NVARCHAR(256) = @pTARGET_TABLE, @TARGET_COLUMN NVARCHAR(256) = @pTARGET_COLUMN, + @TARGET_COLUMN_TYPE NVARCHAR(256) = @pTARGET_COLUMN_TYPE, @REF_DOC_TYPE NVARCHAR(256) = @pREF_DOC_TYPE, @REF_DOC_NR_COLUMN NVARCHAR(256) = @pREF_DOC_NR_COLUMN, @REF_DOC_NR NVARCHAR(256) = @pREF_DOC_NR, @ADDITIONAL_WHERE NVARCHAR(256) = @pADDITIONAL_WHERE, - @STATUS_TEXT NVARCHAR(256) = @pSTATUS_TEXT, - @STATUS_TEXT_MAX_LEN INT = @pSTATUS_TEXT_MAX_LEN, + @STATUS_VALUE NVARCHAR(256) = @pSTATUS_VALUE, + @STATUS_VALUE_MAX_LEN INT = @pSTATUS_VALUE_MAX_LEN, + @STATUS_VALUE_DELIMITER NVARCHAR(3) = @pSTATUS_VALUE_DELIMITER, @USERNAME NVARCHAR(50) = @pUSERNAME, @OVERWRITE BIT = @pOVERWRITE, @LOGLEVEL NVARCHAR(25) = @pLOGLEVEL; @@ -59,26 +63,28 @@ BEGIN TRY -- decalare runtime vars DECLARE @LINE_COUNT_1 INT = 0, @LINE_COUNT_2 INT = 0, - @STATUS_TEXT_OLD_VALUE NVARCHAR(256) = NULL, @SQL_COMMAND NVARCHAR(2000) = NULL, + @STATUS_VALUE_OLD NVARCHAR(256) = NULL, @RETURN_STATUS NVARCHAR(256) = NULL, - @RETURN_STATUS_TEXT NVARCHAR(256) = NULL; + @RETURN_STATUS_VALUE NVARCHAR(256) = NULL; PRINT '===============================' PRINT 'PROCEDURE - START [PRDD_SET_STATUS_IN_THIRDPARTY_DB] @ ' + CONVERT(NVARCHAR(50),GETDATE(),120); - PRINT 'PARAMETER01 - @TARGET_DB: ' + CONVERT(NVARCHAR(256),@TARGET_DB); - PRINT 'PARAMETER02 - @TARGET_SCHEMA: ' + CONVERT(NVARCHAR(256),@TARGET_SCHEMA); - PRINT 'PARAMETER03 - @TARGET_TABLE: ' + CONVERT(NVARCHAR(256),@TARGET_TABLE); - PRINT 'PARAMETER04 - @TARGET_COLUMN: ' + CONVERT(NVARCHAR(256),@TARGET_COLUMN); - PRINT 'PARAMETER05 - @REF_DOC_TYPE: ' + CONVERT(NVARCHAR(256),@REF_DOC_TYPE); - PRINT 'PARAMETER06 - @REF_DOC_NR_COLUMN ' + CONVERT(NVARCHAR(256),@REF_DOC_NR_COLUMN); - PRINT 'PARAMETER07 - @REF_DOC_NR: ' + CONVERT(NVARCHAR(256),@REF_DOC_NR); - PRINT 'PARAMETER08 - @ADDITIONAL_WHERE ' + CONVERT(NVARCHAR(256),@ADDITIONAL_WHERE); - PRINT 'PARAMETER09 - @STATUS_TEXT: ' + CONVERT(NVARCHAR(256),@STATUS_TEXT); - PRINT 'PARAMETER10 - @STATUS_TEXT_MAX_LEN ' + CONVERT(NVARCHAR(256),@STATUS_TEXT_MAX_LEN); - PRINT 'PARAMETER11 - @USERNAME: ' + CONVERT(NVARCHAR(50),@USERNAME); - PRINT 'PARAMETER12 - @OVERWRITE: ' + CONVERT(NVARCHAR(1),@OVERWRITE); - PRINT 'PARAMETER13 - @LOGLEVEL: ' + CONVERT(NVARCHAR(25),@LOGLEVEL); + PRINT 'PARAMETER01 - @TARGET_DB: ' + CONVERT(NVARCHAR(256),@TARGET_DB); + PRINT 'PARAMETER02 - @TARGET_SCHEMA: ' + CONVERT(NVARCHAR(256),@TARGET_SCHEMA); + PRINT 'PARAMETER03 - @TARGET_TABLE: ' + CONVERT(NVARCHAR(256),@TARGET_TABLE); + PRINT 'PARAMETER04 - @TARGET_COLUMN: ' + CONVERT(NVARCHAR(256),@TARGET_COLUMN); + PRINT 'PARAMETER05 - @TARGET_COLUMN_TYPE: ' + CONVERT(NVARCHAR(256),@TARGET_COLUMN_TYPE); + PRINT 'PARAMETER06 - @REF_DOC_TYPE: ' + CONVERT(NVARCHAR(256),@REF_DOC_TYPE); + PRINT 'PARAMETER07 - @REF_DOC_NR_COLUMN ' + CONVERT(NVARCHAR(256),@REF_DOC_NR_COLUMN); + PRINT 'PARAMETER08 - @REF_DOC_NR: ' + CONVERT(NVARCHAR(256),@REF_DOC_NR); + PRINT 'PARAMETER09 - @ADDITIONAL_WHERE ' + CONVERT(NVARCHAR(256),@ADDITIONAL_WHERE); + PRINT 'PARAMETER10 - @STATUS_VALUE: ' + CONVERT(NVARCHAR(256),@STATUS_VALUE); + PRINT 'PARAMETER11 - @STATUS_VALUE_MAX_LEN ' + CONVERT(NVARCHAR(256),@STATUS_VALUE_MAX_LEN); + PRINT 'PARAMETER12 - @STATUS_VALUE_DELIMITER ' + CONVERT(NVARCHAR(3),@STATUS_VALUE_DELIMITER); + PRINT 'PARAMETER13 - @USERNAME: ' + CONVERT(NVARCHAR(50),@USERNAME); + PRINT 'PARAMETER14 - @OVERWRITE: ' + CONVERT(NVARCHAR(1),@OVERWRITE); + PRINT 'PARAMETER15 - @LOGLEVEL: ' + CONVERT(NVARCHAR(25),@LOGLEVEL); --==============================================-- Prepare the log table --================================================-- IF (@LOGLEVEL is not NULL) BEGIN @@ -128,10 +134,10 @@ BEGIN TRY SET @SQL_COMMAND = N'SELECT @LINE_COUNT_2 = count(*) FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' - AND (' + @TARGET_COLUMN + ' = ''' + @STATUS_TEXT + ''' - OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_TEXT + ''' - OR ' + @TARGET_COLUMN + ' LIKE ''' + @STATUS_TEXT + '%'' - OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_TEXT + '%'') ' + AND (' + @TARGET_COLUMN + ' = ''' + @STATUS_VALUE + ''' + OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_VALUE + ''' + OR ' + @TARGET_COLUMN + ' LIKE ''' + @STATUS_VALUE + '%'' + OR ' + @TARGET_COLUMN + ' LIKE ''%' + @STATUS_VALUE + '%'') ' + @ADDITIONAL_WHERE; PRINT 'Build "status text" Query @SQL_COMMAND: ' + @SQL_COMMAND; EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@LINE_COUNT_2 INT OUTPUT', @LINE_COUNT_2 OUTPUT; @@ -148,7 +154,7 @@ BEGIN TRY PRINT 'Given status text is not there, update needed!'; IF ((@OVERWRITE = 0) and (@LINE_COUNT_1 > 0)) BEGIN - SET @SQL_COMMAND = N'SELECT TOP 1 @STATUS_TEXT_OLD_VALUE = ' + @TARGET_COLUMN + ' + SET @SQL_COMMAND = N'SELECT TOP 1 @STATUS_VALUE_OLD = ' + @TARGET_COLUMN + ' FROM ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' AND ' + @TARGET_COLUMN + ' IS NOT NULL @@ -156,23 +162,23 @@ BEGIN TRY + @ADDITIONAL_WHERE; PRINT 'Build "status text" Query for existing values @SQL_COMMAND: ' + @SQL_COMMAND; PRINT 'Found: ' + CONVERT(NVARCHAR(25),@LINE_COUNT_1) + ' docs with a existing status text!'; - EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@STATUS_TEXT_OLD_VALUE NVARCHAR(256) OUTPUT', @STATUS_TEXT_OLD_VALUE OUTPUT; + EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND,N'@STATUS_VALUE_OLD NVARCHAR(256) OUTPUT', @STATUS_VALUE_OLD OUTPUT; IF ((@RETURN_STATUS = 0)) BEGIN PRINT 'Query was successful!'; - IF (@STATUS_TEXT_OLD_VALUE <> @STATUS_TEXT) BEGIN - PRINT 'Extending DMS status text'; - SET @STATUS_TEXT = concat(@STATUS_TEXT_OLD_VALUE,'; ',@STATUS_TEXT); + IF (@STATUS_VALUE_OLD <> @STATUS_VALUE) BEGIN + PRINT 'Extending status text'; + SET @STATUS_VALUE = concat(@STATUS_VALUE_OLD,@STATUS_VALUE_DELIMITER,@STATUS_VALUE); END; - SET @STATUS_TEXT = CASE WHEN LEFT(@STATUS_TEXT,2) = '; ' - THEN SUBSTRING(@STATUS_TEXT, 2, LEN(@STATUS_TEXT)-2) - ELSE @STATUS_TEXT + SET @STATUS_VALUE = CASE WHEN LEFT(@STATUS_VALUE,2) = @STATUS_VALUE_DELIMITER + THEN SUBSTRING(@STATUS_VALUE, 2, LEN(@STATUS_VALUE)-2) + ELSE @STATUS_VALUE END; END; ELSE BEGIN PRINT 'Query has failed!'; - PRINT '@STATUS_TEXT keeps untouched!'; + PRINT '@STATUS_VALUE keeps untouched!'; END; END; ELSE IF ((@OVERWRITE = 1) or (@LINE_COUNT_1 = 0)) BEGIN @@ -182,14 +188,21 @@ BEGIN TRY --===========================================-- data collected updating row --=============================================-- -- Check STATUS TEXT for its lenght - SET @STATUS_TEXT = LTRIM(RTRIM(@STATUS_TEXT)) - IF (LEN(@STATUS_TEXT) > @STATUS_TEXT_MAX_LEN) - SET @STATUS_TEXT = LEFT(@STATUS_TEXT,@STATUS_TEXT_MAX_LEN) + SET @STATUS_VALUE = LTRIM(RTRIM(convert(NVARCHAR(MAX),@STATUS_VALUE))) + IF (LEN(@STATUS_VALUE) > @STATUS_VALUE_MAX_LEN) + SET @STATUS_VALUE = LEFT(@STATUS_VALUE,@STATUS_VALUE_MAX_LEN) - SET @SQL_COMMAND = N'SET NOCOUNT ON; - UPDATE ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' - SET ' + @TARGET_COLUMN + ' = ''' + @STATUS_TEXT + ''' - WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' ' + @ADDITIONAL_WHERE; + SET @SQL_COMMAND = N'SET NOCOUNT ON; UPDATE ' + @TARGET_DB + '.' + @TARGET_SCHEMA + '.' + @TARGET_TABLE + ' '; + + IF (@TARGET_COLUMN_TYPE LIKE 'INT%') BEGIN + SET @STATUS_VALUE = convert(INT,@STATUS_VALUE); + SET @SQL_COMMAND += ' SET ' + @TARGET_COLUMN + ' = ' + @STATUS_VALUE; + END; ELSE BEGIN + -- NVARCHAR is always the failsafe + SET @SQL_COMMAND += ' SET ' + @TARGET_COLUMN + ' = ''' + @STATUS_VALUE + ''''; + END; + + SET @SQL_COMMAND += ' WHERE ' + @REF_DOC_NR_COLUMN + ' = ''' + @REF_DOC_NR + ''' ' + @ADDITIONAL_WHERE; PRINT 'Build Update @SQL_COMMAND: ' + @SQL_COMMAND; EXEC @RETURN_STATUS = sp_executesql @SQL_COMMAND; @@ -219,13 +232,14 @@ BEGIN TRY END; ----------------------------------------------------------------------------------------------------------------------------- - IF (@RETURN_STATUS = 1) - SET @RETURN_STATUS_TEXT = 'SUCCESS'; - ELSE - SET @RETURN_STATUS_TEXT = 'FAILED'; + IF (@RETURN_STATUS = 1) BEGIN + SET @RETURN_STATUS_VALUE = 'SUCCESS'; + END; ELSE BEGIN + SET @RETURN_STATUS_VALUE = 'FAILED'; + END; PRINT ''; - PRINT 'PROCEDURE Result: ' + @RETURN_STATUS_TEXT; + PRINT 'PROCEDURE Result: ' + @RETURN_STATUS_VALUE; PRINT 'PROCEDURE - END [PRDD_SET_STATUS_IN_THIRDPARTY_DB] @ ' + CONVERT(NVARCHAR(50),GETDATE(),120); PRINT '==============================='; @@ -234,7 +248,7 @@ BEGIN TRY IF (@LOGLEVEL in ('INFO','WARN')) BEGIN IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN INSERT INTO [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [MESSAGE5], [ADDED_WHO], [ADDED_WHEN]) - VALUES (@LOGLEVEL, concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_TEXT, 'OVERWRITE = ' + convert(varchar,@OVERWRITE), @RETURN_STATUS_TEXT, @USERNAME ,GetDate()); + VALUES (@LOGLEVEL, concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_VALUE, 'OVERWRITE = ' + convert(varchar,@OVERWRITE), @RETURN_STATUS_VALUE, @USERNAME ,GetDate()); END; END; ----------------------------------------------------------------------------------------------------------------------------- @@ -251,7 +265,7 @@ BEGIN CATCH IF (@LOGLEVEL in ('INFO','WARN','ERROR')) BEGIN IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG') BEGIN INSERT INTO [TBDD_SET_STATUS_IN_THIRDPARTY_DB_LOG]([LOG_LEVEL],[MESSAGE1], [MESSAGE2], [MESSAGE3], [MESSAGE4], [MESSAGE5], [ADDED_WHO], [ADDED_WHEN]) - VALUES ('ERROR', concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_TEXT, 'OVERWRITE = ' + convert(NVARCHAR,@OVERWRITE), ERROR_MESSAGE(), @USERNAME, GetDate()); + VALUES ('ERROR', concat(@TARGET_DB,'.',@TARGET_SCHEMA,'.',@TARGET_TABLE,'.',@TARGET_COLUMN), concat(@REF_DOC_TYPE,' - Nr: ',@REF_DOC_NR), @STATUS_VALUE, 'OVERWRITE = ' + convert(NVARCHAR,@OVERWRITE), ERROR_MESSAGE(), @USERNAME, GetDate()); END; END; -----------------------------------------------------------------------------------------------------------------------------