Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- USE [CRUG0]
- GO
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- /*
- - ABSTRACT
- Procedura di aggiornamento dei codici delle Unità Organizzative, dove presenti, da ISP a ISGS e viceversa.
- - PARAMETERS
- @isISGS bit: indica se movimentare i dati da ISP a ISGS oppure viceversa
- -- 0: UO da ISP (0171046) a ISGS (8722324)
- -- 1: UO da ISGS (8722324) a ISP (0171046)
- @isStagingTable int: indica se aggiornare i dati delle tabelle di staging o quelle finali oppure entrambe che hanno isUpdated = 1
- -- null: Aggiorno tutto
- -- 0: Aggiorno solo le tabelle Finali
- -- 1: Aggiorno solo le tabelle di Staging
- @SchemaName varchar(150): faccio l'update o la select solo di questa tabella
- -- null: non faccio nulla
- -- 'CDIG_DATA': eseguo la select o update dello schema a seconda della valorizzazione del parametro @DoUpdate
- @TableName varchar(150): faccio l'update o la select solo di questa tabella
- -- null: non faccio nulla
- -- 'T_StimeAttivita_Demand': eseguo la select o update della tabella a seconda della valorizzazione del parametro @DoUpdate
- @ColumName varchar(250): faccio l'update o la select solo di un campo specifico. NOTA BENE: DEVE ESSERE TRA LE PARENTESI QUADRE -> [...]
- -- null: non faccio nulla
- -- '[codUoPrevalente_Iniziativa]': eseguo la select o update del campo che deve essere presente sulla tabella dichiarata sul parametro @UpdateTableName
- @DoUpdate int: faccio la select o eseguo l'update dei campi con il valore isUpdated = 1 per aggiornare il codice ISP -> ISGS o viceversa (a seconda del parametro @isISGS).
- -- 0: Faccio la select dei campi isUpdated = 1 con i dati che dovrei aggiornare
- -- 1: Faccio l'update dei campi isUpdated = 1 con i dati da aggiornare
- - HISTORY
- - 2019.01.17 A.MELATO
- - Creazione
- - CALL SAMPLE:
- DECLARE @isISGS bit = 1
- , @isStagingTable int = null
- , @SchemaName varchar(150) = 'CDIG_DATA'
- , @TableName varchar(150) = 'T_StimeAttivita_Demand'
- , @ColumName varchar(250) = '[codUoPrevalente_Iniziativa]'
- , @DoUpdate int = 0
- EXEC [CDIG_DATA].[ST_UpdateUO_Code] @isISGS, @isStagingTable, @SchemaName, @TableName, @ColumName, @DoUpdate
- */
- ALTER PROCEDURE [CDIG_DATA].[ST_UpdateUO_Code]
- @isISGS bit,
- @isStagingTable INT,
- @SchemaName VARCHAR(150),
- @TableName VARCHAR(150),
- @ColumName VARCHAR(250),
- @DoUpdate INT
- AS
- BEGIN
- DECLARE @IsActiveUpdateUO bit
- SELECT @IsActiveUpdateUO = ParamValue
- FROM CDIG_ADMIN.T_Param
- WHERE ParamName = 'IsActiveUpdateUO'
- IF (@IsActiveUpdateUO = 0)
- BEGIN
- RETURN 0;
- END
- -- Creazione tabelle temporanee
- CREATE TABLE #T_Temp_Id
- (
- Id INT,
- FieldName VARCHAR(20)
- PRIMARY KEY (Id)
- )
- CREATE TABLE #T_Temp_Update
- (
- FullTableName VARCHAR(150),
- ColumnName VARCHAR(250),
- FieldName VARCHAR(20)
- PRIMARY KEY (FullTableName, ColumnName)
- )
- ------------------------------------------------------------------------------------------------------------------------------------------------
- /*** -- VARIABILI PER FASE DI AGGIORNAMENTO DEI DATI -- ***/
- DECLARE @selectTable nvarchar(MAX) = ''
- DECLARE @updateTable VARCHAR(MAX) = ''
- DECLARE @rowsCount INT = 0;
- --DECLARE @SchemaName_Variable varchar(max)
- --DECLARE @TableName_Variable varchar(max)
- DECLARE @ColumnName_Variable VARCHAR(MAX)
- DECLARE @FullTableName_Variable VARCHAR(MAX)
- DECLARE @FieldName VARCHAR(20) = ''
- IF (@DoUpdate = 0 OR @DoUpdate = 1)
- BEGIN
- IF NOT EXISTS (SELECT top 1 1 FROM #T_Temp_Update)
- BEGIN
- INSERT INTO #T_Temp_Update (FullTableName, ColumnName, FieldName)
- SELECT FullTableName, ColumnName, FieldName
- FROM CDIG_ANAG.T_AllTableCDIG
- WHERE ((isUpdated = 1)
- AND (SchemaName = isnull(@SchemaName,SchemaName) AND TableName = isnull(@TableName,TableName) AND ColumnName = isnull(@ColumName, ColumnName)))
- AND isStagingTable = isnull(@isStagingTable, isStagingTable)
- AND FieldName IS NOT NULL
- END
- --select '#T_Temp_Update',* from #T_Temp_Update
- While 1=1
- BEGIN
- SELECT Top 1 @FullTableName_Variable = FullTableName, @ColumnName_Variable = ColumnName, @FieldName = FieldName FROM #T_Temp_Update ORDER BY FullTableName, ColumnName
- --set @rowsCount = 0
- -- Per terminare il ciclo quando arriva all'ultima riga
- IF @@ROWCOUNT=0
- Break;
- IF(@isISGS = 0)
- BEGIN
- SET @FieldName = CASE WHEN @FieldName LIKE '%ISP' THEN REPLACE(@FieldName, 'ISP', 'ISGS') ELSE REPLACE(@FieldName, 'ISGS', 'ISP') END
- END
- IF (@DoUpdate = 0)
- BEGIN
- SELECT @selectTable = 'select distinct ''' + @FullTableName_Variable + ''' as TableName, ''' + @ColumnName_Variable + ''' as ColumnName, src.' + CASE WHEN @FieldName LIKE '%ISP' THEN REPLACE(@FieldName, 'ISP', 'ISGS') ELSE REPLACE(@FieldName, 'ISGS', 'ISP') END + ' as newUO, ' + @ColumnName_Variable + ' as oldUO from ' + @FullTableName_Variable + ' as dst
- join [CDIG_ANAG].[MappingIsgsIsp] src
- on src.' + @FieldName + ' = LEFT(dst.' + @ColumnName_Variable + ', case when charindex('' '', dst.' + @ColumnName_Variable + ') > 0 then charindex('' '',dst.' + @ColumnName_Variable + ') else len(dst.' + @ColumnName_Variable + ') end)';
- print(@selectTable)
- print(@FullTableName_Variable + ': ' + @ColumnName_Variable)
- EXECUTE (@selectTable)
- END
- IF (@DoUpdate = 1)
- BEGIN
- BEGIN TRY
- BEGIN TRANSACTION
- -- inizializzazione variabile conteggio righe aggiornate
- DECLARE @nR INT = 0;
- SELECT @selectTable = 'select @nR = count(*) from ' + @FullTableName_Variable + ' dst
- join [CDIG_ANAG].[MappingIsgsIsp] src
- on dst.' + @ColumnName_Variable + ' = src.' + @FieldName + '';
- -- associazione conteggio a nuova variabile
- EXEC sp_executesql @selectTable, N'@nR int out', @rowsCount OUT
- SELECT @updateTable = 'update dst
- set dst.' + @ColumnName_Variable + ' = src.' + CASE WHEN @FieldName LIKE '%ISP' THEN REPLACE(@FieldName, 'ISP', 'ISGS') ELSE REPLACE(@FieldName, 'ISGS', 'ISP') END + '
- from ' + @FullTableName_Variable + ' dst
- join [CDIG_ANAG].[MappingIsgsIsp] src
- on LEFT(dst.' + @ColumnName_Variable + ', case when charindex('' '', dst.' + @ColumnName_Variable + ') > 0 then charindex('' '',dst.' + @ColumnName_Variable + ') else len(dst.' + @ColumnName_Variable + ') end) = src.' + @FieldName + '';
- --print(@FullTableName_Variable + ': ' + @ColumnName_Variable)
- --print(@updateTable)
- EXECUTE (@updateTable)
- -- se transazione avvenuta con successo
- INSERT INTO [CDIG_ANAG].[ISGS_ISP_CONTROLLI]
- VALUES (@FullTableName_Variable, @ColumnName_Variable, @rowsCount, 'OK: ' + @FieldName, GETDATE())
- COMMIT TRAN
- END TRY
- BEGIN CATCH
- IF @@TRANCOUNT > 0
- ROLLBACK TRAN -- ROLLBACK in caso di errore
- INSERT INTO [CDIG_ANAG].[ISGS_ISP_CONTROLLI]
- VALUES (@FullTableName_Variable, @ColumnName_Variable, 0, ERROR_MESSAGE(), GETDATE())
- END CATCH
- END
- DELETE FROM #T_Temp_Update WHERE FullTableName = @FullTableName_Variable AND ColumnName = @ColumnName_Variable
- END
- END
- --select * from [CDIG_ANAG].[ISGS_ISP_CONTROLLI]
- --order by DateUpdate desc
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement