sync
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
USE [HCITools]
|
||||
GO
|
||||
|
||||
IF EXISTS (SELECT * FROM sys.objects o JOIN sys.schemas s ON o.schema_id = s.schema_id WHERE o.name = 'Retrieve_Data_Interbase' AND OBJECTPROPERTY(object_id,N'IsProcedure') = 1 AND s.name = 'dba')
|
||||
DROP PROCEDURE [dba].[Retrieve_Data_Interbase]
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
CREATE PROCEDURE [dba].[Retrieve_Data_Interbase]
|
||||
|
||||
AS
|
||||
/*=============================================================================
|
||||
|
||||
Explication du traitement realise par la SP
|
||||
-------------------------------------------
|
||||
Cette SP est executee tous les jours et effectue le rattrapage des donnees entre SUNCENT et AMACENT par rapport a une table.
|
||||
|
||||
1: Recuperation du login et de la date
|
||||
2: Reprise des top 40 000 de la table [HCItools].[dba].[TT_AMR_interbase_to_retrieve] et isTreated = 0 puis mise en table temporaire
|
||||
3: Curseur sur la table temporaire avec le distinct table name
|
||||
4: Dummy update sur les records concernes sur SUNCENT
|
||||
5: Update AMR (AMR_type_of_change = 2) selon variables @currentlogin et @currentdate et current SPID
|
||||
6: Flag is isTreated = 1 sur la table [HCItools].[dba].[TT_AMR_interbase_to_retrieve]
|
||||
|
||||
Parametres
|
||||
----------
|
||||
|
||||
Creation : 28.04.2021 / SPE
|
||||
|
||||
Modifications :
|
||||
|
||||
=============================================================================*/
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
/*------------------- Declaration des variables --------------------*/
|
||||
|
||||
DECLARE @errno int,
|
||||
@errmsg varchar(255),
|
||||
@tableName varchar(60),
|
||||
@currentlogin sysname,
|
||||
@currentdate datetime,
|
||||
@pkname sysname,
|
||||
@pktype sysname,
|
||||
@colName varchar(255)
|
||||
|
||||
|
||||
|
||||
/*-------------------------- Traitement ---------------------------*/
|
||||
BEGIN TRY
|
||||
|
||||
/* 1: Recuperation du login et de la date */
|
||||
SET @currentlogin = SYSTEM_USER
|
||||
SET @currentdate = getdate()
|
||||
|
||||
/* 2: Reprise des top 40 000 de la table [HCItools].[dba].[TT_AMR_interbase_to_retrieve] et isTreated = 0 puis mise en table temporaire */
|
||||
CREATE TABLE #TT_current_AMR([AMRREF_AMR_table_name] [varchar](60) NULL,[AMRREF_row_ID] [int] NULL,[AMRREF_AMR_row_GUID] [varchar](60) NULL)
|
||||
|
||||
INSERT INTO #TT_current_AMR([AMRREF_AMR_table_name],[AMRREF_row_ID],[AMRREF_AMR_row_GUID])
|
||||
SELECT TOP 40000 [AMRREF_AMR_table_name],[AMRREF_row_ID],[AMRREF_AMR_row_GUID] FROM [HCItools].[dba].[TT_AMR_interbase_to_retrieve] WHERE IsTreated = 0 ORDER BY [AMRREF_AMR_APS_TS]
|
||||
|
||||
/* 3: Curseur sur la table temporaire avec le distinct table name */
|
||||
DECLARE c_alltables CURSOR LOCAL FORWARD_ONLY STATIC FOR
|
||||
SELECT AMRREF_AMR_table_name
|
||||
FROM #TT_current_AMR
|
||||
GROUP BY AMRREF_AMR_table_name
|
||||
ORDER BY AMRREF_AMR_table_name
|
||||
;
|
||||
OPEN c_alltables
|
||||
;
|
||||
FETCH NEXT FROM c_alltables
|
||||
INTO @tableName
|
||||
;
|
||||
WHILE @@fetch_status = 0
|
||||
BEGIN
|
||||
|
||||
SET @Colname = NULL
|
||||
|
||||
/* 4: Dummy update sur les records concernes sur SUNCENT */
|
||||
|
||||
/* get target PK column name and type */
|
||||
select @pkname = c.[name], @pktype =col.data_type
|
||||
from arizona.sys.tables t with (nolock)
|
||||
join arizona.sys.indexes i with (nolock)
|
||||
on i.[object_id] = t.[object_id]
|
||||
and i.is_primary_key = 1
|
||||
join arizona.sys.index_columns ic with (nolock)
|
||||
on ic.index_id = i.index_id
|
||||
and ic.[object_id] = i.[object_id]
|
||||
join arizona.sys.[columns] c with (nolock)
|
||||
on c.[object_id] = ic.[object_id]
|
||||
and c.column_id = ic.column_id
|
||||
join arizona.INFORMATION_SCHEMA.COLUMNS col
|
||||
on col.column_name = c.name
|
||||
and col.table_name = t.[name]
|
||||
where t.[name] = @tableName;
|
||||
|
||||
SELECT TOP 1 @Colname = COLUMN_NAME
|
||||
FROM arizona.information_schema.columns
|
||||
WHERE table_name = @tableName
|
||||
AND DATA_TYPE = 'bit'
|
||||
AND IS_NULLABLE = 'NO'
|
||||
|
||||
IF @Colname is null
|
||||
BEGIN
|
||||
SELECT TOP 1 @Colname = COLUMN_NAME
|
||||
FROM arizona.information_schema.columns
|
||||
WHERE table_name = @tableName
|
||||
AND CHARACTER_MAXIMUM_LENGTH > 0
|
||||
AND IS_NULLABLE = 'NO'
|
||||
ORDER BY CHARACTER_MAXIMUM_LENGTH ASC
|
||||
END
|
||||
|
||||
IF @Colname is null
|
||||
BEGIN
|
||||
SELECT TOP 1 @Colname = COLUMN_NAME
|
||||
FROM arizona.information_schema.columns
|
||||
WHERE table_name = @tableName
|
||||
AND DATETIME_PRECISION is not null
|
||||
AND IS_NULLABLE = 'NO'
|
||||
END
|
||||
|
||||
IF @Colname is null
|
||||
BEGIN
|
||||
SELECT TOP 1 @Colname = COLUMN_NAME
|
||||
FROM arizona.information_schema.columns
|
||||
WHERE table_name = @tableName
|
||||
AND NUMERIC_PRECISION is not null
|
||||
AND IS_NULLABLE = 'NO'
|
||||
AND COLUMN_NAME <> @PKname
|
||||
END
|
||||
|
||||
if @pktype = 'int'
|
||||
BEGIN
|
||||
|
||||
/* dummy update */
|
||||
EXEC('UPDATE prod
|
||||
SET prod.' + @Colname +' = prod.' + @Colname +'
|
||||
FROM #TT_current_AMR tt
|
||||
JOIN arizona.dbo.' + @tableName +' prod
|
||||
ON tt.AMRREF_row_ID = prod.' + @pkname +'
|
||||
WHERE tt.AMRREF_AMR_table_name = ''' + @tableName + '''')
|
||||
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
|
||||
/* dummy update */
|
||||
EXEC('UPDATE prod
|
||||
SET prod.' + @Colname +' = prod.' + @Colname +'
|
||||
FROM #TT_current_AMR tt
|
||||
JOIN arizona.dbo.' + @tableName +' prod
|
||||
ON tt.AMRREF_AMR_row_GUID = prod.' + @pkname +'
|
||||
WHERE tt.AMRREF_AMR_table_name = ''' + @tableName + '''')
|
||||
|
||||
END
|
||||
|
||||
FETCH NEXT FROM c_alltables
|
||||
INTO @tableName
|
||||
;
|
||||
END
|
||||
;
|
||||
CLOSE c_alltables
|
||||
;
|
||||
DEALLOCATE c_alltables
|
||||
|
||||
/* 5: Update AMR (AMR_type_of_change = 2) selon variables @currentlogin et @currentdate et current SPID */
|
||||
UPDATE arizona.dbo.aps_monitor_row
|
||||
SET AMR_type_of_change = 2
|
||||
WHERE AMR_APS_TS >= @currentdate
|
||||
AND AMR_system_user = @currentlogin
|
||||
AND AMR_SQL_spid = @@SPID
|
||||
AND AMR_type_of_change IN (0,1)
|
||||
|
||||
/* 6: Flag is isTreated = 1 sur la table [HCItools].[dba].[TT_AMR_interbase_to_retrieve] */
|
||||
UPDATE TTAMR
|
||||
SET isTreated = 1
|
||||
FROM [HCItools].[dba].[TT_AMR_interbase_to_retrieve] TTAMR
|
||||
JOIN #TT_current_AMR TT
|
||||
ON TT.AMRREF_AMR_table_name = TTAMR.AMRREF_AMR_table_name
|
||||
AND TT.AMRREF_row_ID = TTAMR.AMRREF_row_ID
|
||||
|
||||
UPDATE TTAMR
|
||||
SET isTreated = 1
|
||||
FROM [HCItools].[dba].[TT_AMR_interbase_to_retrieve] TTAMR
|
||||
JOIN #TT_current_AMR TT
|
||||
ON TT.AMRREF_AMR_table_name = TTAMR.AMRREF_AMR_table_name
|
||||
AND TT.AMRREF_AMR_row_GUID = TTAMR.AMRREF_AMR_row_GUID
|
||||
|
||||
DROP TABLE #TT_current_AMR
|
||||
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT @errno = 70003,
|
||||
@errmsg = 'error on Retrieve_Data_Interbase! ' + error_message()
|
||||
goto error_99
|
||||
END CATCH;
|
||||
|
||||
/*------------------ Retour au programme appelant -----------------*/
|
||||
|
||||
RETURN(@@error);
|
||||
|
||||
/*---------------------- Traitement des erreurs ----------------------*/
|
||||
error_99:
|
||||
RAISERROR (@errmsg, 16, 1);
|
||||
RETURN(@errno);
|
||||
|
||||
|
||||
GO
|
||||
Reference in New Issue
Block a user