diff --git a/cds restore check.sql b/cds restore check.sql new file mode 100644 index 0000000..fb7d670 --- /dev/null +++ b/cds restore check.sql @@ -0,0 +1,7 @@ +USE sandbox +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED + +SELECT CAST([LogDateTime] AS DATE) AS [day], COUNT(1) AS cnt +FROM [cds_log] +GROUP BY CAST([LogDateTime] AS DATE) +ORDER BY CAST([LogDateTime] AS DATE) DESC \ No newline at end of file diff --git a/gaia test queue sending.sql b/gaia test queue sending.sql new file mode 100644 index 0000000..79182dc --- /dev/null +++ b/gaia test queue sending.sql @@ -0,0 +1,308 @@ +USE gaia +GO +DECLARE + @galenicaQueueID UNIQUEIDENTIFIER, + @storageAccountName VARCHAR(MAX) = 'sttpsuntestphaqueues', + @queue VARCHAR(63) = 'sun004-triafin', + @payload VARCHAR(MAX)= '70612151215GSU004136552GSU0041500090004GSU004150170489782312025-12-032022-04-0248.4BASSET JOSE - YUGRRP Hsnü - 1789 LUGNORREZahlung ohne QRRExcel253062025-12-05T10:34:24', + @headers VARCHAR(MAX), + @headersBlob VARCHAR(MAX), + @oldConversationID UNIQUEIDENTIFIER, + @blobID UNIQUEIDENTIFIER, + @messageTypeName VARCHAR(255) = 'CeresSenderMessageType', + @statusCode INT, + @statusText NVARCHAR(4000), + @conversationID UNIQUEIDENTIFIER, + @messageID UNIQUEIDENTIFIER, + @insertionTime DATETIME +BEGIN + SET NOCOUNT ON; + + /* -------------------- VALIDATION -------------------- */ + + + /* -------------------- VARIABLES -------------------- */ + DECLARE @token VARCHAR(MAX), + @credentialName VARCHAR(256) = NULL, + @timeoutSeconds INT = 30, + @response VARCHAR(MAX), + @rawResponse XML, + @finalURL VARCHAR(MAX), + @ttl CHAR(13) = 'messagettl=-1', + @source VARBINARY(MAX), + @originalPayload VARCHAR(MAX) = @payload, + @url VARCHAR(MAX), + @urlblob VARCHAR(MAX), + @returnValue INT = 0, + @payloadBytes INT, + @createURL VARCHAR(MAX), + @retryCount INT, + @maxRetries INT, + @retryDelaySeconds INT, + @waitTime CHAR(8), + @postURL VARCHAR(MAX); + + + /* -------------------- GET TOKEN -------------------- */ + IF @credentialName IS NULL + BEGIN + EXEC @returnValue = sp_get_Bearer_token + @Token = @token OUTPUT, + @statusCode = @statusCode OUTPUT, + @statusText = @statusText OUTPUT; + + IF @returnValue <> 0 OR @statusCode <> 200 + RAISERROR('Error: Get token failed! statusCode: %d statusText: %s',16,1,@statusCode,@statusText); + END + + + /* -------------------- HEADERS -------------------- */ + IF @headers IS NULL + SET @headers = CONCAT( + 'Content-Type: application/xml',CHAR(10), + 'x-ms-version: 2025-07-05',CHAR(10), + 'Authorization: Bearer ',@token,CHAR(10) + ); + + IF @headersBlob IS NULL + SET @headersBlob = CONCAT( + 'x-ms-blob-type: BlockBlob',CHAR(10), + 'x-ms-version: 2025-07-05',CHAR(10), + 'Authorization: Bearer ',@token,CHAR(10) + ); + + + /* -------------------- PREPARE -------------------- */ + EXEC sp_manage_GalenicaQueue; + + SELECT @conversationID = ISNULL(@oldConversationID,NEWID()); + + SET @url = CONCAT('https://',@storageAccountName,'.queue.core.windows.net/'); + SET @urlblob = CONCAT('https://',@storageAccountName,'.blob.core.windows.net/'); + + IF RIGHT(@queue,1) <> '/' SET @queue = CONCAT(@queue,'/'); + SET @queue = LOWER(@queue); + + + /* -------------------- INSERT MONITORING -------------------- */ + IF @galenicaQueueID IS NULL + BEGIN + SET @galenicaQueueID = NEWID(); + + INSERT INTO GalenicaQueue( + galenicaQueueID, conversationID, messageID, + storageAccountName, queueName, headers, + headersBlob, blobID, messageTypeName, payload + ) VALUES ( + @galenicaQueueID, @conversationID, @messageID, + @storageAccountName, REPLACE(@queue,'/',''), @headers, + @headersBlob, @blobID, @messageTypeName, @originalPayload + ); + END + + + /* -------------------- BLOB UPLOAD IF NEEDED -------------------- */ + SET @payloadBytes = DATALENGTH(@originalPayload); + + IF @payloadBytes > 49152 + BEGIN + IF @blobID IS NULL + BEGIN + EXEC @returnValue = sp_put_message_into_blob + @url = @urlblob, + @payload = @originalPayload, + @headers = @headersBlob, + @response = @response OUTPUT, + @statusCode = @statusCode OUTPUT, + @statusText = @statusText OUTPUT, + @blobID = @blobID OUTPUT; + + IF @returnValue <> 0 RETURN; + END + END + ELSE + SET @blobID = NULL; + + + /* -------------------- BUILD MESSAGE -------------------- */ + SET @postURL = CONCAT(@url,@queue,'messages?',CONCAT_WS('&',@ttl,NULLIF(@token,''))); + + IF @blobID IS NULL + SET @payload = CONCAT( + '',CONVERT(VARCHAR(255),@conversationID), + '',@messageTypeName, + '' + ); + ELSE + SET @payload = CONCAT( + '',CONVERT(VARCHAR(255),@conversationID), + '',CONVERT(VARCHAR(255),@blobID), + '',@messageTypeName, + '' + ); + + --cast the payload to xml first to enforce a utf-16le bytes encoding + SET @source = CONVERT(VARBINARY(MAX), CONVERT(XML, @payload)); + SET @payload = + CAST('' AS XML).value('xs:base64Binary(sql:variable("@source"))','varchar(max)'); + + SET @payload = CONCAT('', @payload, ''); + print @payload + + /* -------------------- SEND MESSAGE FIRST TRY -------------------- */ + BEGIN TRY + EXEC @returnValue = sp_Make_Restful_Call + @url = @postURL, + @method = 'POST', + @payload = @payload, + @headers = @headers, + @credentialName = @credentialName, + @timeoutSeconds = @timeoutSeconds, + @response = @response OUTPUT, + @statusText = @statusText OUTPUT, + @statusCode = @statusCode OUTPUT, + @raiseError = 0 ; + + IF @statusCode BETWEEN 400 AND 499 + RAISERROR('Error in make restfull call',16,10); + END TRY + BEGIN CATCH + + + /* -------------------- QUEUE MISSING → CREATE IT -------------------- */ + IF @statusCode = 404 + BEGIN + SET @createURL = CONCAT(@url,@queue,'?',@token); + + EXEC @returnValue = sp_Make_Restful_Call + @url = @createURL, + @method = 'PUT', + @payload = NULL, + @headers = @headers, + @credentialName = @credentialName, + @timeoutSeconds = @timeoutSeconds, + @response = @response OUTPUT, + @statusText = @statusText OUTPUT, + @statusCode = @statusCode OUTPUT; + + + /* -------------------- 409 CONFLICT → RETRY + CLEANUP -------------------- */ + IF @statusCode = 409 + BEGIN + SET @retryCount = 0; + SET @maxRetries = 10; + SET @retryDelaySeconds = 10; + + WHILE @retryCount < @maxRetries + BEGIN + EXEC @returnValue = sp_Make_Restful_Call + @url = @createURL, + @method = 'PUT', + @payload = NULL, + @headers = @headers, + @credentialName = @credentialName, + @timeoutSeconds = @timeoutSeconds, + @response = @response OUTPUT, + @statusText = @statusText OUTPUT, + @statusCode = @statusCode OUTPUT; + + IF @statusCode IN (201,204) + BREAK; + + /* Cleanup blob if needed */ + IF @blobID IS NOT NULL + BEGIN + EXEC @returnValue = sp_delete_message_from_blob + @storageAccountName = @storageAccountName, + @headers = @headersBlob, + @blobID = @blobID, + @response = @response OUTPUT, + @statusCode = @statusCode OUTPUT, + @statusText = @statusText OUTPUT; + END + + /* Wait */ + SET @waitTime = CONCAT('00:00:', RIGHT('0'+CAST(@retryDelaySeconds AS VARCHAR(2)),2)); + WAITFOR DELAY @waitTime; + + SET @retryCount += 1; + END + + IF @statusCode NOT IN (201,204) + RAISERROR( + 'Error: Create the queue failed after %d retries! statusCode: %d statusText: %s', + 16,1,@retryCount,@statusCode,@statusText + ); + END + + /* Retry sending */ + EXEC @returnValue = sp_Make_Restful_Call + @url = @postURL, + @method = 'POST', + @payload = @payload, + @headers = @headers, + @credentialName = @credentialName, + @timeoutSeconds = @timeoutSeconds, + @response = @response OUTPUT, + @statusText = @statusText OUTPUT, + @statusCode = @statusCode OUTPUT; + END + + END CATCH + + return + + + + /* -------------------- UPDATE MONITORING -------------------- */ + UPDATE GalenicaQueue + SET blobID = @blobID, + statusCode = @statusCode, + statusText = @statusText, + response = @response + WHERE galenicaQueueID = @galenicaQueueID; + + + /* -------------------- FINAL VALIDATION -------------------- */ + IF @returnValue <> 0 OR @statusCode NOT BETWEEN 200 and 299 + RAISERROR('Error: Create the message into the queue failed! statusCode: %d statusText: %s', + 16,1,@statusCode,@statusText); + + + /* -------------------- PARSE RESPONSE -------------------- */ + SET @rawResponse = CAST(@response AS XML); + + SELECT @messageID = msg.value('(MessageId)[1]','UNIQUEIDENTIFIER'), + @insertionTime = + CONVERT(DATETIME, + CAST( + LTRIM(RTRIM( + REPLACE( + SUBSTRING( + msg.value('(InsertionTime)[1]','VARCHAR(MAX)'), + CHARINDEX(',',msg.value('(InsertionTime)[1]','VARCHAR(MAX)'))+1, + LEN(msg.value('(InsertionTime)[1]','VARCHAR(MAX)')) + ), + 'GMT','' + ) + )) + AS DATETIMEOFFSET) + AT TIME ZONE 'UTC' + AT TIME ZONE 'Central European Standard Time') + FROM @rawResponse.nodes('/QueueMessagesList/QueueMessage') AS T(msg); + + + UPDATE GalenicaQueue + SET messageID = @messageID, + blobID = @blobID, + statusCode = @statusCode, + statusText = @statusText, + response = @response, + insertionTime = @insertionTime + WHERE galenicaQueueID = @galenicaQueueID; + +END + + +GO diff --git a/paul_snippets/check production times.sql b/paul_snippets/check production times.sql new file mode 100644 index 0000000..a409355 --- /dev/null +++ b/paul_snippets/check production times.sql @@ -0,0 +1,66 @@ +USE JOB +GO + + +DECLARE @Jobs TABLE(JobKey_Start INT, JobKey_End INT, Jobname NVARCHAR(50), INDEX Idx_JobKey_Start NONCLUSTERED (JobKey_Start), INDEX Idx_JobKey_End NONCLUSTERED (JobKey_End)) + + +INSERT INTO @Jobs (JobKey_Start, JobKey_End, Jobname) + SELECT JOB_KEY AS JobKey_Start, dbo.fn_GetJobEnd(JOB_KEY) AS JobKey_End, JOBNAME + FROM dbo.JOB_STATE + WHERE [STATE] = 'RUNNING' + AND ENTRYDATE BETWEEN '2025-12-01' AND '2026-03-01' + AND (JOBNAME LIKE 'IndexProdukte[_]%' OR + JOBNAME LIKE 'IndexViewer[_]%' OR + JOBNAME LIKE 'Product[_]%') +--SELECT DISTINCT Jobname FROM @Jobs + +SELECT + CONVERT(NVARCHAR(16), StartDt, 104) AS StartDt, + --DATENAME(WEEKDAY, StartDt) AS [Day], + SUM(res.IndexProdukte__Generate__XML_Data) AS IndexProdukte__Generate__XML_Data, + SUM(res.IndexProdukte__Import__SourceData) AS IndexProdukte__Import__SourceData, + SUM(res.IndexProdukte__Publish__for_QS) AS IndexProdukte__Publish__for_QS, + SUM(res.IndexProdukte__QS_Data_Integrity_Checks) AS IndexProdukte__QS_Data_Integrity_Checks, + SUM(res.IndexProdukte__Update__Stamm_Daten) AS IndexProdukte__Update__Stamm_Daten, + SUM(res.IndexProdukte__Update__Work_Stamm_Daten) AS IndexProdukte__Update__Work_Stamm_Daten, + SUM(res.IndexViewer__DL__insureINDEX) AS IndexViewer__DL__insureINDEX, + SUM(res.IndexViewer__DL_UL__Daily) AS IndexViewer__DL_UL__Daily, + SUM(res.IndexViewer__UL__insureINDEX) AS IndexViewer__UL__insureINDEX, + SUM(res.Product__Generate_Superset) AS Product__Generate_Superset +FROM ( + SELECT CAST(StartDt AS DATE) AS StartDt, + IndexProdukte__Generate__XML_Data, + IndexProdukte__Import__SourceData, + IndexProdukte__Publish__for_QS, + IndexProdukte__QS_Data_Integrity_Checks, + IndexProdukte__Update__Stamm_Daten, + IndexProdukte__Update__Work_Stamm_Daten, + IndexViewer__DL__insureINDEX, + IndexViewer__DL_UL__Daily, + IndexViewer__UL__insureINDEX, + Product__Generate_Superset + FROM ( + SELECT jss.JOBNAME, jss.ENTRYDATE AS [StartDt], jse.ENTRYDATE AS [EndDt], (DATEDIFF(MINUTE, jss.ENTRYDATE, jse.ENTRYDATE)) AS Duration + FROM @Jobs AS js + INNER JOIN dbo.JOB_STATE AS jss ON js.JobKey_Start = jss.JOB_KEY + INNER JOIN dbo.JOB_STATE AS jse ON js.JobKey_End = jse.JOB_KEY + ) AS t + PIVOT ( + SUM(Duration) + FOR JOBNAME IN ( + IndexProdukte__Generate__XML_Data, + IndexProdukte__Import__SourceData, + IndexProdukte__Publish__for_QS, + IndexProdukte__QS_Data_Integrity_Checks, + IndexProdukte__Update__Stamm_Daten, + IndexProdukte__Update__Work_Stamm_Daten, + IndexViewer__DL__insureINDEX, + IndexViewer__DL_UL__Daily, + IndexViewer__UL__insureINDEX, + Product__Generate_Superset + ) + ) AS pivot_table +) AS res +GROUP BY res.StartDt +ORDER BY res.StartDt ASC \ No newline at end of file diff --git a/test 000400.Initialize_InsuranceNetworkServiceAdvice.sql b/test 000400.Initialize_InsuranceNetworkServiceAdvice.sql new file mode 100644 index 0000000..d2de1a3 --- /dev/null +++ b/test 000400.Initialize_InsuranceNetworkServiceAdvice.sql @@ -0,0 +1,394 @@ +USE [Arizona] +GO +BEGIN TRANSACTION + +SET ANSI_NULLS ON +SET ANSI_WARNINGS ON +go + +/* +Script pour la mise à jour de la table [InsuranceNetworkServiceAdvice] + 25.08.2025 / FLA pour le bug OCTP-9752 + + Modifications + 29.10.2025 TSC TPDT-1391 Removed linked server usage + 11.11.2025 TSC TPDT-1391 Removed dbo.xxx instance in remote code +-------------------------------------------------------------------------------------------------------------------------------------------*/ + +IF(NOT EXISTS (SELECT 1 FROM [InstanceContext] WHERE [Business] = 'TPCENT')) +BEGIN + SET XACT_ABORT ON; + + /* variables for linked server replacement */ + DECLARE @host_central VARCHAR(200); + DECLARE @host_local VARCHAR(200); + DECLARE @query VARCHAR(MAX); + DECLARE @payload VARCHAR(MAX); + DECLARE @response NVARCHAR(MAX); + DECLARE @statusText NVARCHAR(4000); + DECLARE @statusCode INT; + DECLARE @azFuncUri VARCHAR(500); + --for output handling + DECLARE @format NVARCHAR(MAX); + DECLARE @data NVARCHAR(MAX); + DECLARE @tpl NVARCHAR(MAX); + DECLARE @q NVARCHAR(MAX); + + SELECT @host_central = hostname + FROM aps_fn_fetch_central_hostname(DEFAULT); + + SELECT @host_local = fqdn_escaped + FROM aps_fn_fetch_local_instance_fqdn(); + + SELECT @azFuncUri = url + FROM aps_fn_fetch_az_func_url(); + + SET @payload=' +{ +"QueryText": "SELECT 1 AS enabled FROM @dbo@.aps_monitor_table WHERE AMT_table_name = ''Insurance_netw_serv_advice'' AND AMT_vertical_synchronization = 1" +,"Parameters": {} +, "TargetServer": @host@ +, "TargetDbName": "arizona" +, "Credential": "sqlLksrvTpCentAdm" +}'; + SET @payload = REPLACE(@payload, '@host@', isnull('"'+@host_central+'"', 'null')); + SET @payload = REPLACE(@payload, '@dbo@','dbo'); + + EXEC [sp_Make_Restful_Call] @url = @azFuncUri, + @method = 'POST', + @payload = @payload, + @headers = DEFAULT, + @credentialName = NULL, + @timeoutSeconds = 10, + @response = @response OUTPUT, + @statusText = @statusText OUTPUT, + @statusCode = @statusCode OUTPUT; + IF @statusCode NOT BETWEEN 200 and 299 + BEGIN + RAISERROR('Error when calling Azure Function: %s (Status code: %d). %s', 16, 1, @statusText, @statusCode, @payload); + RETURN; + END + SELECT @format = [Value] + FROM OPENJSON(@response) + WHERE [Key] = 'schemaFormatted'; + + SELECT @data = [Value] + FROM OPENJSON(@response) + WHERE [Key] = 'data'; + + IF OBJECT_ID('tempdb..#vsync_config')IS NOT NULL BEGIN + DROP TABLE #vsync_config; + END + CREATE TABLE #vsync_config([enabled] BIT NOT NULL); + SET @tpl = N' +INSERT INTO #vsync_config +SELECT * +FROM OPENJSON(''@data@'') +@format@ +'; + + SET @q = REPLACE(REPLACE(@tpl, '@data@', @data), '@format@', @format); + + EXEC (@q); + + IF EXISTS (SELECT 1 FROM [#vsync_config] c WHERE c.[enabled] = 1) + BEGIN + + DECLARE @cvCurrentOrganizationalUnit INT, + @out_default_value VARCHAR(60) + + IF OBJECT_ID('tempdb..#v_Sync_V_Insurance_netw_serv_advice')IS NOT NULL BEGIN + DROP TABLE #v_Sync_V_Insurance_netw_serv_advice; + END + CREATE TABLE #v_Sync_V_Insurance_netw_serv_advice( + calc_subsidiary_id INT NULL, + Insurance_netw_serv_advice_ID INT NULL, + INSA_Advice_Enum TINYINT NULL, + INSA_Insurance_Network_ID INT NULL, + INSA_Item_ID INT NULL + ); + + EXEC sp_bmc_Bmc_Applic_Default + @in_job_type = 3, + @in_param_int_1 = NULL, + @in_param_int_2 = NULL, + @in_param_varchar_1 = 'cvCurrentOrganizationalUnit', + @out_default_value = @out_default_value OUTPUT, + @out_param_int_1 = NULL; + + SET @cvCurrentOrganizationalUnit = convert(int,@out_default_value); + + /* Fetch data from central */ + SET @query = ' +SELECT * +FROM @dbo@.v_Sync_V_Insurance_netw_serv_advice +'; + SET @query = REPLACE(@query, '@dbo@','dbo'); + --JSON param must be without carriage return, remove them from the query to execute + SET @query = REPLACE(REPLACE(@query, CHAR(13), ' '), CHAR(10), ' '); + + set @payload=' +{ +"QueryText": @query@ +,"Parameters": {} +, "TargetServer": @host@ +, "TargetDbName": "arizona" +, "Credential": "sqlLksrvTpCentAdm" +, "InjectResults": true +, "InjectServer": @local@ +, "InjectDbName": "arizona" +, "InjectDbSchema": "bulk" +}'; + + SET @payload = REPLACE(@payload, '@query@', isnull('"'+@query+'"', 'null')); + SET @payload = REPLACE(@payload, '@host@', isnull('"'+@host_central+'"', 'null')); + SET @payload = REPLACE(@payload, '@local@', isnull('"'+@host_local+',1433"', 'null')); + + EXEC [sp_Make_Restful_Call] @url = @azFuncUri, + @method = 'POST', + @payload = @payload, + @headers = DEFAULT, + @credentialName = NULL, + @timeoutSeconds = 10, + @response = @response OUTPUT, + @statusText = @statusText OUTPUT, + @statusCode = @statusCode OUTPUT; + + IF @statusCode NOT BETWEEN 200 and 299 + BEGIN + RAISERROR('Error when calling Azure Function: %s (Status code: %d). %s', 16, 1, @statusText, @statusCode, @payload); + RETURN; + END + + DECLARE @tbl VARCHAR(255); + SELECT @tbl = [Value] + FROM OPENJSON(@response) + WHERE [Key]='TableName'; + + SET @tpl = N' +INSERT INTO #v_Sync_V_Insurance_netw_serv_advice([calc_subsidiary_id], [Insurance_netw_serv_advice_ID], [INSA_Advice_Enum], [INSA_Insurance_Network_ID], [INSA_Item_ID]) +SELECT [calc_subsidiary_id], [Insurance_netw_serv_advice_ID], [INSA_Advice_Enum], [INSA_Insurance_Network_ID], [INSA_Item_ID] +FROM @tbl@; + +DROP TABLE @tbl@; +'; + + SET @q = REPLACE(@tpl, '@tbl@', @tbl); + EXEC (@q); + + -- region managing insurance_network table + set @query=' + SELECT + [Insurance_network_ID], [INN_PH_insurance], [INN_ofac_code], [INN_veka_code], [INN_active], [INN_master_ID], + [Insurance_network_text_ID], [INNT_language], [INNT_insurance_network], [INNT_text], [INNT_master_ID], [INNT_documentation_url] + FROM [v_Sync_V_Insurance_network] n + INNER JOIN [v_Sync_V_Insurance_network_text] nt on nt.[INNT_insurance_network] = n.[Insurance_network_ID] and nt.[calc_subsidiary_id] = n.[calc_subsidiary_id] + WHERE n.[calc_subsidiary_id]=@sub + ' + set @query = REPLACE(REPLACE(@query, CHAR(13), ' '), CHAR(10), ' '); + + SET @payload = ' +{ +"QueryText": @query@ +,"Parameters": {"sub": @sub@} +, "TargetServer": @host@ +, "TargetDbName": "arizona" +, "Credential": "sqlLksrvTpCentAdm" +, "InjectResults": true +, "InjectServer": @local@ +, "InjectDbName": "arizona" +, "InjectDbSchema": "bulk" +} + '; + SET @payload = REPLACE(@payload, '@host@', isnull('"'+@host_central+'"', 'null')); + SET @payload = REPLACE(@payload, '@local@', isnull('"'+@host_local+',1433"', 'null')); + SET @payload = REPLACE(@payload, '@query@', isnull('"'+@query+'"', 'null')); + set @payload = REPLACE(@payload, '@sub@', convert(varchar(36), (SELECT TOP 1 ou.OU_subsidiary + FROM Organizational_unit ou with (nolock) + WHERE ou.Organizational_unit_ID = @cvCurrentOrganizationalUnit))); + EXEC [sp_Make_Restful_Call] @url = @azFuncUri, + @method = 'POST', + @payload = @payload, + @headers = DEFAULT, + @credentialName = NULL, + @timeoutSeconds = 10, + @response = @response OUTPUT, + @statusText = @statusText OUTPUT, + @statusCode = @statusCode OUTPUT; + IF @statusCode NOT BETWEEN 200 and 299 + BEGIN + RAISERROR('Error when calling Azure Function: %s (Status code: %d). %s', 16, 1, @statusText, @statusCode, @payload); + RETURN; + END + + DECLARE @tbl_insurance_network VARCHAR(255); + SELECT @tbl_insurance_network = [Value] + FROM OPENJSON(@response) + WHERE [Key]='TableName'; + + IF OBJECT_ID('tempdb..#insurance_network')IS NOT NULL + BEGIN + DROP TABLE #insurance_network; + END + + CREATE TABLE #insurance_network( + [Insurance_network_ID] int, + [INN_PH_insurance] uniqueidentifier, + [INN_ofac_code] varchar(20), + [INN_veka_code] varchar(20), + [INN_active] bit, + [INN_master_ID] int, + [Insurance_network_text_ID] int, + [INNT_language] int, + [INNT_insurance_network] int, + [INNT_text] varchar(40), + [INNT_master_ID] int, + [INNT_documentation_url] varchar(2048) + ); + SET @tpl = N' +INSERT INTO #insurance_network([Insurance_network_ID], [INN_PH_insurance], [INN_ofac_code], [INN_veka_code], [INN_active], [INN_master_ID], [Insurance_network_text_ID], [INNT_language], [INNT_insurance_network], [INNT_text], [INNT_master_ID], [INNT_documentation_url]) +SELECT [Insurance_network_ID], [INN_PH_insurance], [INN_ofac_code], [INN_veka_code], [INN_active], [INN_master_ID], [Insurance_network_text_ID], [INNT_language], [INNT_insurance_network], [INNT_text], [INNT_master_ID], [INNT_documentation_url] +FROM @tbl@; + +DROP TABLE @tbl@; +'; + + SET @q = REPLACE(@tpl, '@tbl@', @tbl_insurance_network); + EXEC (@q); + + --SELECT * + UPDATE t + SET t.[INN_PH_insurance] = s.[INN_PH_insurance], + t.[INN_ofac_code] = s.[INN_ofac_code], + t.[INN_veka_code] = s.[INN_veka_code], + t.[INN_active] = s.[INN_active], + t.[INN_master_ID] = s.[INN_master_ID] + FROM [Insurance_network] t + JOIN ( + SELECT DISTINCT + [Insurance_network_ID] + ,[INN_PH_insurance] + ,[INN_ofac_code] + ,[INN_veka_code] + ,[INN_active] + ,[INN_master_ID] + FROM [#insurance_network] + )s ON s.[Insurance_network_ID] = t.[Insurance_network_ID] + WHERE s.[INN_PH_insurance] <> t.[INN_PH_insurance] + OR s.[INN_ofac_code] <> t.[INN_ofac_code] + OR s.[INN_veka_code] <> t.[INN_veka_code] + OR s.[INN_active] <> t.[INN_active] + OR s.[INN_master_ID] <> t.[INN_master_ID]; + PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - Updated values on [Insurance_network]. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.'; + + INSERT INTO [Insurance_network] ([Insurance_network_ID], + [INN_PH_insurance], + [INN_ofac_code], + [INN_veka_code], + [INN_active], + [INN_master_ID]) + SELECT DISTINCT + [Insurance_network_ID], + [INN_PH_insurance], + [INN_ofac_code], + [INN_veka_code], + [INN_active], + [INN_master_ID] + FROM [#insurance_network] s + WHERE NOT EXISTS( + SELECT 1 + FROM [Insurance_network] t + WHERE s.[Insurance_network_ID] = t.[Insurance_network_ID] + ); + PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - inserted missing [Insurance_network]. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.'; + + UPDATE t + SET t.[INNT_language] = s.[INNT_language] + , t.[INNT_insurance_network] = s.[INNT_insurance_network] + , t.[INNT_text] = s.[INNT_text] + , t.[INNT_master_ID] = s.[INNT_master_ID] + , t.[INNT_documentation_url] = s.[INNT_documentation_url] + FROM [Insurance_network_text] t + JOIN ( + SELECT DISTINCT + [Insurance_network_text_ID], + [INNT_language], + [INNT_insurance_network], + [INNT_text], + [INNT_master_ID], + [INNT_documentation_url] + FROM [#insurance_network] + )s ON s.[Insurance_network_text_ID] =t.[Insurance_network_text_ID] + WHERE s.[INNT_language] <> t.[INNT_language] + OR s.[INNT_insurance_network] <> t.[INNT_insurance_network] + OR s.[INNT_text] <> t.[INNT_text] + OR s.[INNT_master_ID] <> t.[INNT_master_ID] + OR s.[INNT_documentation_url] <> t.[INNT_documentation_url] + ; + PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - Updated existing values on [Insurance_network_text]. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.'; + + INSERT INTO [Insurance_network_text] ([Insurance_network_text_ID], + [INNT_language], + [INNT_insurance_network], + [INNT_text], + [INNT_master_ID], + [INNT_documentation_url]) + SELECT DISTINCT + [Insurance_network_text_ID], + [INNT_language], + [INNT_insurance_network], + [INNT_text], + [INNT_master_ID], + [INNT_documentation_url] + FROM [#insurance_network] s + WHERE NOT EXISTS( + SELECT 1 + FROM [Insurance_network_text] t + WHERE t.[Insurance_network_text_ID] = s.[Insurance_network_text_ID] + ); + PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - Added missing [Insurance_network_text]. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.'; + + -- endregion + + --#region update existing [Insurance_netw_serv_advice] + UPDATE t + SET t.[INSA_Advice_Enum] = s.[INSA_Advice_Enum], + t.[INSA_Insurance_Network_ID] = s.[INSA_Insurance_Network_ID], + t.[INSA_Item_ID] = s.[INSA_Item_ID] + FROM [Insurance_netw_serv_advice] t + JOIN [#v_Sync_V_Insurance_netw_serv_advice] s ON s.[Insurance_netw_serv_advice_ID] = t.[Insurance_netw_serv_advice_ID] + WHERE t.[INSA_Advice_Enum] <> s.[INSA_Advice_Enum] + OR t.[INSA_Item_ID] <> s.[INSA_Item_ID] + OR ISNULL(t.[INSA_Insurance_Network_ID],-1) <> ISNULL(s.[INSA_Insurance_Network_ID],-1); + PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - updated existing [Insurance_netw_serv_advice]. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.'; + --#endregion update existing [Insurance_netw_serv_advice] + + --#region update existing advices + INSERT INTO [Insurance_netw_serv_advice] ([Insurance_netw_serv_advice_ID], + [INSA_Advice_Enum], + [INSA_Insurance_Network_ID], + [INSA_Item_ID]) + SELECT + [Insurance_netw_serv_advice_ID], + [INSA_Advice_Enum], + [INSA_Insurance_Network_ID], + [INSA_Item_ID] + FROM [#v_Sync_V_Insurance_netw_serv_advice] s + WHERE NOT EXISTS( + SELECT 1 + FROM [Insurance_netw_serv_advice] t + WHERE t.[Insurance_netw_serv_advice_ID] = s.[Insurance_netw_serv_advice_ID] + ) + AND NOT EXISTS( + SELECT 1 + FROM [Insurance_netw_serv_advice] t + WHERE t.INSA_Advice_Enum = s.INSA_Advice_Enum + AND ISNULL(t.INSA_Insurance_Network_ID,-1) = ISNULL(s.INSA_Insurance_Network_ID,-1) + AND t.INSA_Item_ID=s.INSA_Item_ID + ); + PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - inserted missing [Insurance_netw_serv_advice]. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.'; + + --#endregion update existing advices + END +END +ROLLBACK TRANSACTION