Advertisement
Guest User

Procedura Update

a guest
Jan 17th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.07 KB | None | 0 0
  1. USE [CRUG0]
  2. GO
  3. SET ANSI_NULLS ON
  4. GO
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. /*
  9.     - ABSTRACT
  10.         Procedura di aggiornamento dei codici delle Unità Organizzative, dove presenti, da ISP a ISGS e viceversa.
  11.  
  12.     - PARAMETERS   
  13.         @isISGS bit: indica se movimentare i dati da ISP a ISGS oppure viceversa
  14.             -- 0: UO da ISP (0171046) a ISGS (8722324)
  15.             -- 1: UO da ISGS (8722324) a ISP (0171046)
  16.  
  17.         @isStagingTable int: indica se aggiornare i dati delle tabelle di staging o quelle finali oppure entrambe che hanno isUpdated = 1
  18.             -- null: Aggiorno tutto
  19.             -- 0: Aggiorno solo le tabelle Finali
  20.             -- 1: Aggiorno solo le tabelle di Staging
  21.        
  22.         @SchemaName varchar(150): faccio l'update o la select solo di questa tabella
  23.             -- null: non faccio nulla
  24.             -- 'CDIG_DATA': eseguo la select o update dello schema a seconda della valorizzazione del parametro @DoUpdate
  25.  
  26.         @TableName varchar(150): faccio l'update o la select solo di questa tabella
  27.             -- null: non faccio nulla
  28.             -- 'T_StimeAttivita_Demand': eseguo la select o update della tabella a seconda della valorizzazione del parametro @DoUpdate
  29.        
  30.         @ColumName varchar(250): faccio l'update o la select solo di un campo specifico. NOTA BENE: DEVE ESSERE TRA LE PARENTESI QUADRE -> [...]
  31.             -- null: non faccio nulla
  32.             -- '[codUoPrevalente_Iniziativa]': eseguo la select o update del campo che deve essere presente sulla tabella dichiarata sul parametro @UpdateTableName
  33.        
  34.         @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).
  35.             -- 0: Faccio la select dei campi isUpdated = 1 con i dati che dovrei aggiornare
  36.             -- 1: Faccio l'update dei campi isUpdated = 1 con i dati da aggiornare
  37.    
  38.     - HISTORY
  39.         - 2019.01.17 A.MELATO
  40.             - Creazione
  41.  
  42.     - CALL SAMPLE: 
  43.         DECLARE @isISGS bit = 1
  44.         , @isStagingTable int = null
  45.         , @SchemaName varchar(150) = 'CDIG_DATA'
  46.         , @TableName varchar(150) = 'T_StimeAttivita_Demand'
  47.         , @ColumName varchar(250) = '[codUoPrevalente_Iniziativa]'
  48.         , @DoUpdate int = 0
  49.  
  50.         EXEC [CDIG_DATA].[ST_UpdateUO_Code] @isISGS, @isStagingTable, @SchemaName, @TableName, @ColumName, @DoUpdate
  51.    
  52. */
  53. ALTER PROCEDURE [CDIG_DATA].[ST_UpdateUO_Code]
  54.     @isISGS bit,
  55.     @isStagingTable INT,
  56.     @SchemaName VARCHAR(150),
  57.     @TableName VARCHAR(150),
  58.     @ColumName VARCHAR(250),
  59.     @DoUpdate INT
  60. AS
  61. BEGIN
  62.  
  63. DECLARE @IsActiveUpdateUO bit
  64.  
  65. SELECT @IsActiveUpdateUO = ParamValue
  66. FROM CDIG_ADMIN.T_Param
  67. WHERE ParamName = 'IsActiveUpdateUO'
  68.  
  69. IF (@IsActiveUpdateUO = 0)
  70. BEGIN
  71.     RETURN 0;
  72. END
  73.  
  74. -- Creazione tabelle temporanee
  75. CREATE TABLE #T_Temp_Id
  76. (
  77.     Id INT,
  78.     FieldName VARCHAR(20)
  79.     PRIMARY KEY (Id)
  80. )
  81.  
  82. CREATE TABLE #T_Temp_Update
  83. (
  84.     FullTableName VARCHAR(150),
  85.     ColumnName VARCHAR(250),
  86.     FieldName VARCHAR(20)
  87.     PRIMARY KEY (FullTableName, ColumnName)
  88. )
  89.  
  90. ------------------------------------------------------------------------------------------------------------------------------------------------
  91.  
  92. /*** -- VARIABILI PER FASE DI AGGIORNAMENTO DEI DATI -- ***/
  93. DECLARE @selectTable nvarchar(MAX) = ''
  94. DECLARE @updateTable VARCHAR(MAX) = ''
  95. DECLARE @rowsCount INT = 0;
  96.  
  97. --DECLARE @SchemaName_Variable varchar(max)
  98. --DECLARE @TableName_Variable varchar(max)
  99. DECLARE @ColumnName_Variable VARCHAR(MAX)
  100. DECLARE @FullTableName_Variable VARCHAR(MAX)
  101. DECLARE @FieldName VARCHAR(20) = ''
  102.  
  103. IF (@DoUpdate = 0 OR @DoUpdate = 1)
  104. BEGIN
  105.     IF NOT EXISTS (SELECT top 1 1 FROM #T_Temp_Update)
  106.         BEGIN
  107.             INSERT INTO #T_Temp_Update (FullTableName, ColumnName, FieldName)
  108.             SELECT FullTableName, ColumnName, FieldName
  109.             FROM CDIG_ANAG.T_AllTableCDIG
  110.             WHERE ((isUpdated = 1)
  111.             AND (SchemaName = isnull(@SchemaName,SchemaName) AND TableName = isnull(@TableName,TableName) AND ColumnName = isnull(@ColumName, ColumnName)))
  112.             AND isStagingTable = isnull(@isStagingTable, isStagingTable)
  113.             AND FieldName IS NOT NULL
  114.         END
  115.  
  116.     --select '#T_Temp_Update',* from #T_Temp_Update
  117.  
  118.     While 1=1
  119.     BEGIN
  120.         SELECT Top 1 @FullTableName_Variable = FullTableName, @ColumnName_Variable = ColumnName, @FieldName = FieldName FROM #T_Temp_Update ORDER BY FullTableName, ColumnName
  121.        
  122.         --set @rowsCount = 0
  123.         -- Per terminare il ciclo quando arriva all'ultima riga
  124.         IF @@ROWCOUNT=0
  125.           Break;
  126.        
  127.         IF(@isISGS = 0)
  128.             BEGIN
  129.                 SET @FieldName = CASE WHEN @FieldName LIKE '%ISP' THEN REPLACE(@FieldName, 'ISP', 'ISGS') ELSE REPLACE(@FieldName, 'ISGS', 'ISP') END
  130.             END
  131.  
  132.         IF (@DoUpdate = 0)
  133.             BEGIN
  134.                 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
  135.                                     join [CDIG_ANAG].[MappingIsgsIsp] src
  136.                                     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)';
  137.                 print(@selectTable)
  138.                 print(@FullTableName_Variable + ': ' + @ColumnName_Variable)
  139.                 EXECUTE (@selectTable)
  140.             END
  141.  
  142.         IF (@DoUpdate = 1)
  143.             BEGIN
  144.                 BEGIN TRY
  145.                     BEGIN TRANSACTION
  146.                         -- inizializzazione variabile conteggio righe aggiornate
  147.                         DECLARE @nR INT = 0;
  148.                         SELECT @selectTable = 'select @nR = count(*) from ' + @FullTableName_Variable + ' dst
  149.                             join [CDIG_ANAG].[MappingIsgsIsp] src
  150.                             on dst.' + @ColumnName_Variable + ' = src.' + @FieldName + '';
  151.  
  152.                         -- associazione conteggio a nuova variabile
  153.                         EXEC sp_executesql @selectTable, N'@nR int out', @rowsCount OUT
  154.  
  155.                         SELECT @updateTable = 'update dst
  156.                             set dst.' + @ColumnName_Variable + ' = src.' + CASE WHEN @FieldName LIKE '%ISP' THEN REPLACE(@FieldName, 'ISP', 'ISGS') ELSE REPLACE(@FieldName, 'ISGS', 'ISP') END + '
  157.                             from ' + @FullTableName_Variable + ' dst
  158.                             join [CDIG_ANAG].[MappingIsgsIsp] src
  159.                             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 + '';
  160.  
  161.                         --print(@FullTableName_Variable + ': ' + @ColumnName_Variable)
  162.                         --print(@updateTable)
  163.                         EXECUTE (@updateTable)
  164.                        
  165.                         -- se transazione avvenuta con successo
  166.                         INSERT INTO [CDIG_ANAG].[ISGS_ISP_CONTROLLI]
  167.                         VALUES (@FullTableName_Variable, @ColumnName_Variable, @rowsCount, 'OK: ' + @FieldName, GETDATE())
  168.  
  169.                     COMMIT TRAN
  170.                 END TRY
  171.                 BEGIN CATCH
  172.                     IF @@TRANCOUNT > 0
  173.                         ROLLBACK TRAN -- ROLLBACK in caso di errore
  174.  
  175.                     INSERT INTO [CDIG_ANAG].[ISGS_ISP_CONTROLLI]
  176.                     VALUES (@FullTableName_Variable, @ColumnName_Variable, 0, ERROR_MESSAGE(), GETDATE())
  177.                 END CATCH
  178.             END
  179.  
  180.         DELETE FROM #T_Temp_Update WHERE FullTableName = @FullTableName_Variable AND ColumnName = @ColumnName_Variable
  181.  
  182.     END
  183.    
  184. END
  185.  
  186. --select * from [CDIG_ANAG].[ISGS_ISP_CONTROLLI]
  187. --order by DateUpdate desc
  188.  
  189. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement