﻿DROP PROCEDURE IF EXISTS dev.uspCloneIntezmenyChangeIds
GO

CREATE PROCEDURE dev.uspCloneIntezmenyChangeIds
   @pSourceIntezmenyId int
  ,@pSourceDatabase nvarchar(60)
  ,@pEntityHistoryMigration int 
  ,@pDebugMode bit = 0
 -- ,@pChangeInTargetDB bit /*1 - Target DB-ben, 0 - SourceDB-ben */
AS
BEGIN
  DECLARE 
     @parentObjName nvarchar(50)
    ,@parentColName nvarchar(50)
    ,@refedObjName nvarchar(50)
    ,@intezmenyColumnName nvarchar(50)
    ,@sql nvarchar(max)
    ,@intezmenyId int
    ,@databaseToUse nvarchar(60)
    ,@tableName nvarchar(50)
    ,@columnName nvarchar(50)
    ,@message nvarchar(max)
    ,@rowCount int
    
  SET @databaseToUse = @pSourceDatabase + '.dbo.' 
  SET @intezmenyId = @pSourceIntezmenyId
  
  SET @message = 'CHANGE IDS... - ' + FORMAT(GETDATE(), 'hh:mm:ss.ff')
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  -- ================================================================================ --
  --  Az ID-k átírása a Foreign key-k alapján                                         --
  -- ================================================================================ --
  DECLARE tbl_cur CURSOR LOCAL FOR
    SELECT 
       OBJECT_NAME(pc.[object_id]) AS parent_object_name
      ,pc.[name] AS parent_column_name
      ,OBJECT_NAME(rc.[object_id]) AS referenced_object_name
      ,cc.COLUMN_NAME as intezmeny_column_name
    FROM sys.foreign_key_columns f 
      INNER JOIN sys.columns pc ON pc.[object_id] = f.parent_object_id AND pc.column_id = f.parent_column_id
      INNER JOIN sys.columns rc ON rc.[object_id] = f.referenced_object_id AND rc.column_id = f.referenced_column_id
      INNER JOIN (SELECT DISTINCT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME IN (N'C_ALINTEZMENYID', N'C_INTEZMENYID') ) cc ON cc.TABLE_NAME =  OBJECT_NAME(pc.[object_id])
    WHERE pc.[name] NOT IN (N'C_ALINTEZMENYID', N'C_INTEZMENYID', 'ID') --rc.[name] <> 'ID' AND OBJECT_NAME(rc.[object_id]) <> 'T_INTEZMENY'
      AND rc.[name] NOT IN (N'C_ALTANEVID', N'C_TANEVID')
      AND OBJECT_NAME(pc.[object_id]) <> N'T_ENTITYATTRIBUTEHISTORY'

  OPEN tbl_cur
  FETCH NEXT FROM tbl_cur
  INTO @parentObjName, @parentColName, @refedObjName, @intezmenyColumnName

  WHILE @@FETCH_STATUS = 0 BEGIN

    SET @sql = N'
    UPDATE x
    SET ' + @parentColName + ' = t.[newId]
    FROM ' + @databaseToUse + @parentObjName + ' x
    INNER JOIN MappingTable t ON t.oldId = x.' + @parentColName + ' AND t.tableName = ''' + @refedObjName + ''';
    
    SET @rowCount = @@ROWCOUNT
    '
    
    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - ' + @parentObjName + '.' + @parentColName + ' - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT 
    
    FETCH NEXT FROM tbl_cur
    INTO @parentObjName, @parentColName, @refedObjName, @intezmenyColumnName
  END
    
  CLOSE tbl_cur
  DEALLOCATE tbl_cur

  -- ================================================================================ --
  --  A ELOZOTANEVIREKORDID átírása                                                   --
  -- ================================================================================ --
  DECLARE tbl_cur CURSOR LOCAL FOR
  SELECT c.TABLE_NAME, c.COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS c 
      INNER JOIN INFORMATION_SCHEMA.TABLES t ON t.TABLE_NAME = c.TABLE_NAME AND c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
    WHERE COLUMN_NAME = 'ELOZOTANEVIREKORDID' AND t.TABLE_SCHEMA = 'dbo' AND t.TABLE_TYPE = 'BASE TABLE'
      AND c.TABLE_NAME IN (SELECT tableName FROM MappingTable)  
  OPEN tbl_cur
  FETCH NEXT FROM tbl_cur
  INTO @tableName, @columnName

  WHILE @@FETCH_STATUS = 0 BEGIN

    SET @sql = N'
    UPDATE x SET 
      ELOZOTANEVIREKORDID = t.[newId]
    FROM ' + @databaseToUse + @tableName + ' x
    INNER JOIN MappingTable t ON t.oldId = x.ELOZOTANEVIREKORDID AND t.tableName = ''' + @tableName + ''';
        
    SET @rowCount = @@ROWCOUNT
    '
    
    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N'@rowCount int output', @rowCount output    
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - ' + @tableName + '.ELOZOTANEVIREKORDID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT     

    FETCH NEXT FROM tbl_cur
    INTO @tableName, @columnName
  END
    
  CLOSE tbl_cur
  DEALLOCATE tbl_cur


  -- ================================================================================ --
  --  A CREATOR és a MODIFIER átírása                                                 --
  -- ================================================================================ --
  DECLARE tbl_cur CURSOR LOCAL FOR
    SELECT c.TABLE_NAME, c.COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS c 
      INNER JOIN INFORMATION_SCHEMA.TABLES t ON t.TABLE_NAME = c.TABLE_NAME AND c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
    WHERE COLUMN_NAME IN ('CREATOR', 'MODIFIER') AND t.TABLE_SCHEMA = 'dbo' AND t.TABLE_TYPE = 'BASE TABLE'
      AND c.TABLE_NAME IN (SELECT tableName FROM MappingTable)
    ORDER BY c.TABLE_NAME

  OPEN tbl_cur
  FETCH NEXT FROM tbl_cur
  INTO @tableName, @columnName

  WHILE @@FETCH_STATUS = 0 BEGIN

    SET @sql = N'
    UPDATE x
    SET ' + @columnName + ' = t.[newId]
    FROM ' + @databaseToUse + @tableName + ' x
    INNER JOIN MappingTable t ON t.oldId = x.' + @columnName + ' AND t.tableName = ''T_FELHASZNALO'';
            
    SET @rowCount = @@ROWCOUNT
    '
    
    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N'@rowCount int output', @rowCount output   
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - ' + @tableName + '.' + @columnName + ' - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT 
    
    FETCH NEXT FROM tbl_cur
    INTO @tableName, @columnName
  END
    
  CLOSE tbl_cur
  DEALLOCATE tbl_cur

  -- ================================================================================ --
  -- FK nincs, de át kell írni az ID-kat                                              --
  -- ================================================================================ --
  SET @sql = N'
  UPDATE o SET
    o.C_CSENGETESIRENDID = newId
  FROM ' + @databaseToUse + 'T_ORARENDIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_CSENGETESIRENDID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_CSENGETESIREND''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ORARENDIORA.C_CSENGETESIRENDID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  SET @sql = N'
  UPDATE o SET
    o.C_CSENGETESIRENDORAID = newId
  FROM ' + @databaseToUse + 'T_ORARENDIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_CSENGETESIRENDORAID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_CSENGETESIRENDORA''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ORARENDIORA.C_CSENGETESIRENDORAID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  SET @sql = N'

  UPDATE o SET 
    o.C_CSENGETESIRENDID = newId
  FROM ' + @databaseToUse + 'T_TANITASIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_CSENGETESIRENDID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_CSENGETESIREND''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_TANITASIORA.C_CSENGETESIRENDID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  SET @sql = N'

  UPDATE o SET
    o.C_CSENGETESIRENDORAID = newId
  FROM ' + @databaseToUse + 'T_TANITASIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_CSENGETESIRENDORAID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_CSENGETESIRENDORA''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_TANITASIORA.C_CSENGETESIRENDORAID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  SET @sql = N'

  UPDATE o SET
    o.C_ORARENDIORAGROUPID = newId
  FROM ' + @databaseToUse + 'T_ORARENDIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_ORARENDIORAGROUPID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_ORARENDIORA''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ORARENDIORA.C_ORARENDIORAGROUPID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  SET @sql = N'

  UPDATE o SET
    o.C_ORARENDIORAGROUPID = newId
  FROM ' + @databaseToUse + 'T_TANITASIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_ORARENDIORAGROUPID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_ORARENDIORA''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_TANITASIORA.C_ORARENDIORAGROUPID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  SET @sql = N'

  UPDATE o SET
    o.C_FOGLALKOZASID = newId
  FROM ' + @databaseToUse + 'T_ORARENDIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_FOGLALKOZASID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_FOGLALKOZAS''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ORARENDIORA.C_FOGLALKOZASID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  SET @sql = N'
  UPDATE o SET
    o.C_FOGLALKOZASID = newId
  FROM ' + @databaseToUse + 'T_TANITASIORA o 
    INNER JOIN MappingTable t ON t.oldId = o.C_FOGLALKOZASID
  WHERE o.C_INTEZMENYID = @intezmenyId
    AND t.tableName = ''T_FOGLALKOZAS''
              
  SET @rowCount = @@ROWCOUNT'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_TANITASIORA.C_FOGLALKOZASID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  -- ================================================================================ --
  -- T_DASHBOARDUZENETFELHASZNALO-k átírása                                           --
  -- ================================================================================ --
  SET @sql = N'  
    UPDATE o SET 
      o.C_DASHBOARDUZENETID = trgd.ID
    FROM ' + @databaseToUse + 'T_DASHBOARDUZENETFELHASZNALO o
      INNER JOIN ' + @databaseToUse + 'T_DASHBOARDUZENET srcd ON o.C_DASHBOARDUZENETID = srcd.ID
      INNER JOIN T_DASHBOARDUZENET trgd ON srcd.C_EGYEDIAZONOSITO = trgd.C_EGYEDIAZONOSITO'

  IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
  EXEC sp_executesql @sql, N'@rowCount int output',@rowCount output
  SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_DASHBOARDUZENETFELHASZNALO.C_DASHBOARDUZENETID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
  RAISERROR (@message, 10, 1) WITH NOWAIT 

  -- ================================================================================ --
  -- ENTITY HISTORY ID-k átírása                                                      --
  -- ================================================================================ --
  IF @pEntityHistoryMigration = 1 BEGIN
    SET @sql = N'
    UPDATE e
    SET e.C_TANEVID = t.newId
    FROM ' + @databaseToUse + 'T_ENTITYHISTORY e
    INNER JOIN MappingTable t ON t.oldId = e.C_TANEVID AND t.tableName = ''T_TANEV''
    --WHERE e.C_INTEZMENYID = @intezmenyId
              
    SET @rowCount = @@ROWCOUNT'

    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ENTITYHISTORY.C_TANEVID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT 

    SET @sql = N'
    UPDATE e
    SET e.C_ENTITYID = t.newId
    FROM ' + @databaseToUse + 'T_ENTITYHISTORY e
    INNER JOIN MappingTable t ON t.oldId = e.C_ENTITYID AND t.tableName = e.C_ENTITYNAME
    --WHERE e.C_INTEZMENYID = @intezmenyId
              
    SET @rowCount = @@ROWCOUNT'

    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ENTITYHISTORY.C_ENTITYID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT 

    SET @sql = N'


    UPDATE e
    SET e.C_FELHASZNALOID = t.newId
    FROM ' + @databaseToUse + 'T_ENTITYHISTORY e
    INNER JOIN MappingTable t ON t.oldId = e.C_FELHASZNALOID AND t.tableName = ''T_FELHASZNALO''
    --WHERE e.C_INTEZMENYID = @intezmenyId
              
    SET @rowCount = @@ROWCOUNT'

    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ENTITYHISTORY.C_FELHASZNALOID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT 

    SET @sql = N'
    
    UPDATE ea
    SET ea.C_ENTITYHISTORYID = t.newId
    FROM ' + @databaseToUse + 'T_ENTITYATTRIBUTEHISTORY ea
    INNER JOIN MappingTable t ON t.oldId = ea.C_ENTITYHISTORYID AND t.tableName = ''T_ENTITYHISTORY''
    --WHERE e.C_INTEZMENYID = @intezmenyId
              
    SET @rowCount = @@ROWCOUNT'

    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N'@intezmenyId int, @rowCount int output', @intezmenyId, @rowCount output
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ENTITYATTRIBUTEHISTORY.C_ENTITYHISTORYID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT 
    
  END
  IF @pEntityHistoryMigration = 1 BEGIN
    IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE [name] = 'IX_TMP_001') BEGIN
      SET @sql = N'
        CREATE INDEX IX_TMP_001 ON ' + @databaseToUse + 'T_ENTITYHISTORY (C_ENTITYNAME, C_INTEZMENYID)
        WHERE C_INTEZMENYID = ' + CAST(@intezmenyId AS NVARCHAR(10)) + ';
        
        CREATE INDEX IX_TMP_002 ON ' + @databaseToUse + 'T_ENTITYATTRIBUTEHISTORY (C_ENTITYHISTORYID, C_PROPERTYNAME) 
        INCLUDE (C_CURRENTVALUE, C_ORIGINALVALUE)
        '
      IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
      EXEC sp_executesql @sql
    END

    DECLARE tbl_cur CURSOR LOCAL FOR
      SELECT 
         OBJECT_NAME(pc.[object_id]) AS parent_object_name
        ,pc.[name] AS parent_column_name
        ,OBJECT_NAME(rc.[object_id]) AS referenced_object_name
       -- ,rc.[name] AS referenced_column_name
      FROM sys.foreign_key_columns f 
        INNER JOIN sys.columns pc ON pc.[object_id] = f.parent_object_id AND pc.column_id = f.parent_column_id
        INNER JOIN sys.columns rc ON rc.[object_id] = f.referenced_object_id AND rc.column_id = f.referenced_column_id
      WHERE pc.[name] NOT IN (N'C_ALINTEZMENYID', N'C_INTEZMENYID', 'ID') --rc.[name] <> 'ID' AND OBJECT_NAME(rc.[object_id]) <> 'T_INTEZMENY'
        AND rc.[name] NOT IN (N'C_ALTANEVID', N'C_TANEVID')
        AND NOT pc.[name] = 'C_NAME' -- Tábla - Oszlop kivételek
        AND OBJECT_NAME(rc.[object_id]) IN (SELECT tableName FROM MappingTable)  
      ORDER BY OBJECT_NAME(pc.[object_id])

    OPEN tbl_cur
    FETCH NEXT FROM tbl_cur
    INTO @parentObjName, @parentColName, @refedObjName

    WHILE @@FETCH_STATUS = 0 BEGIN
      --PRINT @parentColName + ' - ' + @parentObjName
      SET @sql = N'
      UPDATE a
      SET a.C_CURRENTVALUE = CAST(t.[newId] AS varchar(30))
      FROM ' + @databaseToUse + 'T_ENTITYATTRIBUTEHISTORY a
      INNER JOIN ' + @databaseToUse + 'T_ENTITYHISTORY e ON a.C_ENTITYHISTORYID = e.ID 
      INNER JOIN MappingTable t ON t.oldId = TRY_CAST(NULLIF(a.C_CURRENTVALUE, N''#NULL#'') AS int) 
        AND t.tableName = @refedObjName 
        AND a.C_PROPERTYNAME = @parentColName
        AND e.C_ENTITYNAME = @parentObjName
        AND e.C_INTEZMENYID = @pIntezmenyId
        
      SET @rowCount = @@ROWCOUNT
      '
      
      IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
      EXEC sp_executesql @sql, 
        N'@parentObjName nvarchar(50), @parentColName nvarchar(50), @refedObjName nvarchar(50), @pIntezmenyId int, @rowCount int output', 
          @parentObjName, @parentColName, @refedObjName, @intezmenyId, @rowCount output

      SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ENTITYATTRIBUTEHISTORY.C_CURRENTVALUE - ' + @parentObjName + '.' + @parentColName + ' - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
      RAISERROR (@message, 10, 1) WITH NOWAIT 

      SET @sql = N'
      UPDATE a
      SET a.C_ORIGINALVALUE = CAST(t.[newId] AS varchar(30))
      FROM ' + @databaseToUse + 'T_ENTITYATTRIBUTEHISTORY a
      INNER JOIN ' + @databaseToUse + 'T_ENTITYHISTORY e ON a.C_ENTITYHISTORYID = e.ID 
      INNER JOIN MappingTable t ON t.oldId = TRY_CAST(NULLIF(a.C_ORIGINALVALUE, N''#NULL#'') AS int) 
        AND t.tableName = @refedObjName 
        AND a.C_PROPERTYNAME = @parentColName
        AND e.C_ENTITYNAME = @parentObjName
        AND e.C_INTEZMENYID = @pIntezmenyId'
      
      IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
      EXEC sp_executesql @sql, 
        N'@parentObjName nvarchar(50), @parentColName nvarchar(50), @refedObjName nvarchar(50), @pIntezmenyId int, @rowCount int output', 
          @parentObjName, @parentColName, @refedObjName, @intezmenyId, @rowCount output
      SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ENTITYATTRIBUTEHISTORY.C_ORIGINALVALUE - ' + @parentObjName + '.' + @parentColName + ' - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
      RAISERROR (@message, 10, 1) WITH NOWAIT 
    
      FETCH NEXT FROM tbl_cur
      INTO @parentObjName, @parentColName, @refedObjName
    END
      
    CLOSE tbl_cur
    DEALLOCATE tbl_cur

    SET @sql = N'      
      UPDATE e
      SET e.C_TANEVID = t.newId
      FROM ' + @databaseToUse + 'T_ENTITYHISTORY e
      INNER JOIN MappingTable t ON t.oldId = e.C_TANEVID AND t.tableName = ''T_TANEV''
      --WHERE e.C_INTEZMENYID = @intezmenyId;'

    IF @pDebugMode = 1 RAISERROR (@sql, 10, 1) WITH NOWAIT
    EXEC sp_executesql @sql, N' @rowCount int output', @rowCount output
    SET @message = '    ID ' + FORMAT(GETDATE(), 'HH:mm:ss.ff') + ' - T_ENTITYHISTORY.C_TANEVID - ' + CAST(@rowCount AS nvarchar(20)) + ' sor'
    RAISERROR (@message, 10, 1) WITH NOWAIT 
    
    DROP INDEX IF EXISTS IX_TMP_001 ON T_ENTITYHISTORY
    DROP INDEX IF EXISTS IX_TMP_002 ON T_ENTITYATTRIBUTEHISTORY
  END  

  SET @message = 'CHANGE IDS DONE - ' + FORMAT(GETDATE(), 'HH:mm:ss.ff')
  RAISERROR (@message, 10, 1) WITH NOWAIT 
END
GO

