This commit is contained in:
2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View File

@@ -0,0 +1,174 @@
-- A cél adatbázison kell futtatni.
-- Üres DB-be másolásnál a @pChangeInTargetDB-nek 1nek kell lenni, ha egyébként meg 0-nak
DROP PROCEDURE IF EXISTS dev.uspCloneIntezmeny
GO
CREATE PROCEDURE dev.uspCloneIntezmeny
@pSourceIntezmenyId int
,@pSourceDatabase nvarchar(60)
,@pEntityHistoryMigration int
,@pChangeInTargetDB bit /*1 - Target DB-ben, 0 - SourceDB-ben (az eredetileg üresben) */
AS
BEGIN
DECLARE
@sql nvarchar(max)
,@sp nvarchar(max)
-- ============================================================== --
-- MappingTábla --
-- ============================================================== --
EXEC dev.uspCloneIntezmenyCreateMapping
@pSourceIntezmenyId = @pSourceIntezmenyId
,@pSourceDatabase = @pSourceDatabase
-- ============================================================== --
-- TRIGGER, CONSTRAINT kikapcsolás --
-- ============================================================== --
SET @sql = ''
SELECT @sql += N'ALTER TABLE ' + TABLE_NAME + N' NOCHECK CONSTRAINT ALL; PRINT FORMAT(GETDATE(), ''yyyy-MM-dd HH:mm:ss.ff'') + '' - '' + ''' + TABLE_NAME + N''';' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = N'dbo'
AND TABLE_NAME LIKE 'T[_]%'
AND TABLE_TYPE = N'BASE TABLE'
AND TABLE_NAME NOT IN(N'T_ENTITYHISTORY', N'T_ENTITYATTRIBUTEHISTORY', N'T_FELHASZNALOBELEPES')
SET @sql += N'
--ALTER TABLE T_FELHASZNALOBELEPES NOCHECK CONSTRAINT PK_T_4025022
ALTER TABLE T_FELHASZNALOBELEPES NOCHECK CONSTRAINT FK_402502202_402502200
ALTER TABLE T_FELHASZNALOBELEPES NOCHECK CONSTRAINT FK_402502205_402502203
ALTER TABLE T_FELHASZNALOBELEPES NOCHECK CONSTRAINT FK_4025031_4025029
ALTER TABLE T_FELHASZNALOBELEPES NOCHECK CONSTRAINT FK_4025187_4025186
'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql
EXEC sp_msforeachtable 'DISABLE TRIGGER ALL ON ?'
SET @sql = ''
SELECT @sql += 'ALTER INDEX ' + [name] + ' ON ' + OBJECT_NAME([object_id]) + ' DISABLE;' + char(13) + char(10)
FROM sys.indexes
WHERE is_unique = 1
AND NAME NOT LIKE 'PK%'
AND OBJECT_NAME([object_id]) LIKE 'T_%'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql
-- ============================================================== --
-- CHANGE IN TARGET DB - @pChangeInTargetDB = 1 --
-- ============================================================== --
IF @pChangeInTargetDB = 1 BEGIN
-- Adatok migrálása
EXEC dev.uspCloneIntezmenyMigration
@pSourceIntezmenyId = @pSourceIntezmenyId
,@pSourceDatabase = @pSourceDatabase
,@pEntityHistoryMigration = @pEntityHistoryMigration /* 0 - Nem kell, 1 - csak migráció, 2 - átID-zás is */
EXEC dev.uspCloneIntezmenyChangeIds
@pSourceIntezmenyId = @pSourceIntezmenyId
,@pSourceDatabase = @pSourceDatabase
,@pEntityHistoryMigration = @pEntityHistoryMigration /* 0 - Nem kell, 1 - csak migráció, 2 - átID-zás is */
,@pChangeInTargetDB = @pChangeInTargetDB /*1 - Target DB-ben, 0 - SourceDB-ben */
END
-- ============================================================== --
-- CHANGE IN SOURCE DB - @pChangeInTargetDB = 1 --
-- ============================================================== --
IF @pChangeInTargetDB = 0 BEGIN
-- ============================================================== --
-- TRIGGER, CONSTRAINT kikapcsolás a @pSourceDatabase-ben --
-- ============================================================== --
SET @sp = @pSourceDatabase + '.dbo.sp_executesql'
SET @sql = ''
SELECT @sql += N'ALTER TABLE ' + TABLE_NAME + N' NOCHECK CONSTRAINT ALL; ; PRINT FORMAT(GETDATE(), ''yyyy-MM-dd HH:mm:ss.ff'') + '' - '' + ''' + TABLE_NAME + N''';' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = N'dbo'
AND TABLE_NAME LIKE 'T[_]%'
AND TABLE_TYPE = N'BASE TABLE'
EXEC @sp @sql
SET @sql = ''
SET @sql = N'EXEC sp_msforeachtable ''DISABLE TRIGGER ALL ON ?'''
EXEC @sp @sql
SET @sql = ''
SELECT @sql += 'ALTER INDEX ' + [name] + ' ON ' + OBJECT_NAME([object_id]) + ' DISABLE;' + char(13) + char(10)
FROM sys.indexes
WHERE is_unique = 1
AND NAME NOT LIKE 'PK%'
AND OBJECT_NAME([object_id]) LIKE 'T_%'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC @sp @sql
EXEC dev.uspCloneIntezmenyChangeIds
@pSourceIntezmenyId = @pSourceIntezmenyId
,@pSourceDatabase = @pSourceDatabase
,@pEntityHistoryMigration = @pEntityHistoryMigration /* 0 - Nem kell, 1 - csak migráció, 2 - átID-zás is */
,@pChangeInTargetDB = @pChangeInTargetDB /*1 - Target DB-ben, 0 - SourceDB-ben */
-- Adatok migrálása
EXEC dev.uspCloneIntezmenyMigration
@pSourceIntezmenyId = @pSourceIntezmenyId
,@pSourceDatabase = @pSourceDatabase
,@pEntityHistoryMigration = @pEntityHistoryMigration /* 0 - Nem kell, 1 - csak migráció, 2 - átID-zás is */
END
-- ============================================================== --
-- TRIGGER, CONSTRAINT visszakapcsolás --
-- ============================================================== --
SET @sql = ''
SELECT @sql += N'ALTER TABLE ' + TABLE_NAME + N' WITH CHECK CHECK CONSTRAINT ALL; PRINT FORMAT(GETDATE(), ''yyyy-MM-dd HH:mm:ss.ff'') + '' - '' + ''' + TABLE_NAME + N''';' + CHAR(13) + CHAR(10)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = N'dbo'
AND TABLE_NAME LIKE 'T[_]%'
AND TABLE_TYPE = N'BASE TABLE'
AND TABLE_NAME NOT IN(N'T_ENTITYHISTORY', N'T_ENTITYATTRIBUTEHISTORY', N'T_FELHASZNALOBELEPES')
--A check constreintek miatt a
SET @sql += N'
--ALTER TABLE T_FELHASZNALOBELEPES WITH CHECK CHECK CONSTRAINT PK_T_4025022
ALTER TABLE T_FELHASZNALOBELEPES WITH CHECK CHECK CONSTRAINT FK_402502202_402502200
ALTER TABLE T_FELHASZNALOBELEPES WITH CHECK CHECK CONSTRAINT FK_402502205_402502203
ALTER TABLE T_FELHASZNALOBELEPES WITH CHECK CHECK CONSTRAINT FK_4025031_4025029
ALTER TABLE T_FELHASZNALOBELEPES WITH CHECK CHECK CONSTRAINT FK_4025187_4025186
'
EXEC sp_executesql @sql
EXEC sp_msforeachtable 'ENABLE TRIGGER ALL ON ?'
SET @sql = ''
SELECT @sql += 'ALTER INDEX ' + [name] + ' ON ' + OBJECT_NAME([object_id]) + ' REBUILD;' + char(13) + char(10)
FROM sys.indexes
WHERE is_unique = 1
AND NAME NOT LIKE 'PK%'
AND OBJECT_NAME([object_id]) LIKE 'T_%'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql
-- ================================================================================ --
-- A MappingTable mentése a dev schemába --
-- ================================================================================ --
DECLARE @newIntezmenyId int
SET @sql = ''
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'MappingTable') BEGIN
SELECT @newIntezmenyId = t1.[newId]
FROM MappingTable t1
WHERE t1.tableName = 'T_INTEZMENY'
SET @sql = 'SELECT * INTO dev.[MappingTable_' + CAST(@newIntezmenyId AS nvarchar(100)) + '_' + FORMAT(GETDATE(), 'yyyyMMdd_HHmm') + '_' + @pSourceDatabase + '] FROM MappingTable'
EXEC sp_executesql @sql
END
END
GO

View File

@@ -0,0 +1,291 @@
DROP PROCEDURE IF EXISTS dev.uspCloneIntezmenyChangeIds
GO
CREATE PROCEDURE dev.uspCloneIntezmenyChangeIds
@pSourceIntezmenyId int
,@pSourceDatabase nvarchar(60)
,@pEntityHistoryMigration int
,@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)
SET @databaseToUse =
CASE @pChangeInTargetDB
WHEN 1 THEN ''
WHEN 0 THEN @pSourceDatabase + '.dbo.'
ELSE NULL
END
SET @intezmenyId =
CASE @pChangeInTargetDB
WHEN 1 THEN (SELECT t1.[newId] FROM MappingTable t1 WHERE t1.tableName = 'T_INTEZMENY')
WHEN 0 THEN @pSourceIntezmenyId
ELSE NULL
END
-- ================================================================================ --
-- 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 + '''
--WHERE ' + @intezmenyColumnName + ' = @intezmenyId;'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@intezmenyId int', @intezmenyId
FETCH NEXT FROM tbl_cur
INTO @parentObjName, @parentColName, @refedObjName, @intezmenyColumnName
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)
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'';'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql
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''
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''
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''
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''
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''
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''
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''
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''
'
EXEC sp_executesql @sql, N'@intezmenyId int', @intezmenyId = @intezmenyId
-- ================================================================================ --
-- ENTITY HISTORY ID-k átírása --
-- ================================================================================ --
IF @pEntityHistoryMigration IN (1, 2) 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
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
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;
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;'
END
IF @pEntityHistoryMigration IN (2) 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)
'
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 (OBJECT_NAME(pc.[object_id]) = 'T_FEE' AND 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'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql,
N'@parentObjName nvarchar(50), @parentColName nvarchar(50), @refedObjName nvarchar(50), @pIntezmenyId int',
@parentObjName, @parentColName, @refedObjName, @intezmenyId
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'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql,
N'@parentObjName nvarchar(50), @parentColName nvarchar(50), @refedObjName nvarchar(50), @pIntezmenyId int',
@parentObjName, @parentColName, @refedObjName, @intezmenyId
FETCH NEXT FROM tbl_cur
INTO @parentObjName, @parentColName, @refedObjName
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;'
END
CLOSE tbl_cur
DEALLOCATE tbl_cur
DROP INDEX IF EXISTS IX_TMP_001 ON T_ENTITYHISTORY
DROP INDEX IF EXISTS IX_TMP_002 ON T_ENTITYATTRIBUTEHISTORY
END
END
GO

View File

@@ -0,0 +1,151 @@
DROP PROCEDURE IF EXISTS dev.uspCloneIntezmenyCreateMapping
GO
CREATE PROCEDURE dev.uspCloneIntezmenyCreateMapping
@pSourceIntezmenyId int
,@pSourceDatabase nvarchar(60)
AS
BEGIN
DECLARE
@sql nvarchar(max)
,@maxId int
,@tableName nvarchar(100)
,@mainTableName nvarchar(50)
,@isIdentity bit
-- ============================================================== --
-- Mapping tábla létrehozása --
-- ============================================================== --
DROP TABLE IF EXISTS MappingTable
CREATE TABLE MappingTable (
tableName nvarchar(50),
oldId int,
newId int
)
-- ============================================================== --
-- Mapping tábla feltöltése: Intezmeny --
-- ============================================================== --
SELECT @maxId = ISNULL(MAX(ID), 0) FROM T_INTEZMENY;
SET @sql = '
INSERT INTO MappingTable (tableName, oldId, [newId])
SELECT ''T_INTEZMENY'', ID, @maxId + 1
FROM ' + @pSourceDatabase + '.dbo.T_INTEZMENY
WHERE ID = @pSourceIntezmenyId
'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@pSourceIntezmenyId int, @maxId int', @pSourceIntezmenyId, @maxId
-- ============================================================== --
-- Mapping tábla feltöltése: IDENTITY() táblákból --
-- ============================================================== --
DECLARE tbl_cur CURSOR LOCAL FOR
SELECT DISTINCT TABLE_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), 'ID', 'IsIdentity')
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN (
SELECT ta.name TableName, SUM(pa.rows) RowCnt
FROM sys.tables ta
INNER JOIN sys.partitions pa ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name, ta.name
HAVING SUM(pa.rows) > 0
) x ON x.TableName = c.TABLE_NAME
WHERE COLUMN_NAME = N'C_INTEZMENYID'
AND TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'dbo')
AND TABLE_NAME NOT IN (N'T_ENTITYATTRIBUTEHISTORY', N'T_DICTIONARYTYPE')
AND COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), 'ID', 'IsIdentity') = 1
OPEN tbl_cur
FETCH NEXT FROM tbl_cur
INTO @tableName, @isIdentity
WHILE @@FETCH_STATUS = 0 BEGIN
SET @sql = N'
DECLARE @maxId int;
SELECT @maxId = ISNULL(MAX(ID), ' + CASE WHEN @tableName = 'T_DICTIONARYITEMBASE' THEN '100000' ELSE '0' END + ') FROM ' + @tableName + ';
INSERT INTO MappingTable (tableName, oldId, [newId])
SELECT DISTINCT ''' + @tableName + ''', ID, RANK() OVER(ORDER BY ID) + @maxId
FROM ' + @pSourceDatabase + '.dbo.' + @tableName + '
WHERE C_INTEZMENYID = @intId'
IF @tableName = 'T_DICTIONARYITEMBASE' BEGIN
SET @sql += ' AND ID >= 100000;'
END
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@intId int', @pSourceIntezmenyId
FETCH NEXT FROM tbl_cur
INTO @tableName, @isIdentity
END
CLOSE tbl_cur
DEALLOCATE tbl_cur
-- ============================================================== --
-- Mapping tábla feltöltése: nem IDENTITY() táblákból --
-- ============================================================== --
DECLARE tbl_cur CURSOR LOCAL FOR
SELECT DISTINCT TABLE_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), 'ID', 'IsIdentity')
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN (
SELECT ta.name TableName, SUM(pa.rows) RowCnt
FROM sys.tables ta
INNER JOIN sys.partitions pa ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name, ta.name
HAVING SUM(pa.rows) > 0
) x ON x.TableName = c.TABLE_NAME
WHERE COLUMN_NAME = N'C_ALINTEZMENYID'
AND TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'dbo')
AND TABLE_NAME NOT IN (N'T_ENTITYATTRIBUTEHISTORY', N'T_ENTITYHISTORY', N'T_DICTIONARYTYPE')
AND COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), 'ID', 'IsIdentity') = 0
OPEN tbl_cur
FETCH NEXT FROM tbl_cur
INTO @tableName, @isIdentity
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @mainTableName = OBJECT_NAME(referenced_object_id)
FROM sys.foreign_key_columns f
INNER JOIN sys.columns rc ON rc.[object_id] = f.referenced_object_id AND rc.column_id = f.referenced_column_id
INNER JOIN sys.columns pc ON pc.[object_id] = f.parent_object_id AND rc.column_id = f.parent_column_id
WHERE parent_object_id = OBJECT_ID(@tableName) AND rc.[name] = 'ID' AND pc.[name] = 'ID'
SET @sql = N'
INSERT INTO MappingTable (tableName, oldId, [newId])
SELECT DISTINCT ''' + @tableName + ''', t.oldId, t.[newId]
FROM ' + @pSourceDatabase + '.dbo.' + @tableName + ' s
INNER JOIN MappingTable t ON t.oldId = s.ID AND t.tableName = @mainTableName
WHERE s.C_ALINTEZMENYID = @intId'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@intId int, @mainTableName nvarchar(50)', @pSourceIntezmenyId, @mainTableName
FETCH NEXT FROM tbl_cur
INTO @tableName, @isIdentity
END
CLOSE tbl_cur
DEALLOCATE tbl_cur
-- ============================================================== --
-- MappingTable indexek --
-- ============================================================== --
CREATE CLUSTERED INDEX IX_MappingTable_01 ON MappingTable (oldId, [newId], tableName)
CREATE INDEX IX_MappingTable_02 ON MappingTable (tableName, oldId, [newId])
END
GO

View File

@@ -0,0 +1,331 @@
DROP PROCEDURE IF EXISTS dev.uspCloneIntezmenyMigration
GO
CREATE PROCEDURE dev.uspCloneIntezmenyMigration
@pSourceIntezmenyId int
,@pSourceDatabase nvarchar(60)
,@pEntityHistoryMigration int /* 0 - Nem kell, 1 - csak migráció, 2 - átID-zás is */
AS
BEGIN
DECLARE
@tableName nvarchar(50)
,@intezmenyIdColumn nvarchar(50)
,@isIdentity bit
,@columnList nvarchar(max)
,@sql nvarchar(max)
,@newIntezmenyId int
,@fenntartoAzonosito int
,@firstParentCol nvarchar(50)
,@firstRefObj nvarchar(50)
,@secondParentCol nvarchar(50)
,@secondRefObj nvarchar(50)
SELECT @newIntezmenyId = t1.[newId] FROM MappingTable t1 WHERE t1.tableName = 'T_INTEZMENY'
SELECT @fenntartoAzonosito = '000'
IF NOT EXISTS (SELECT 1 FROM T_FENNTARTO WHERE ID = 0) BEGIN
SET IDENTITY_INSERT T_FENNTARTO ON
INSERT INTO T_FENNTARTO
(ID, C_NEV, TOROLT, SERIAL, LASTCHANGED, CREATED, MODIFIER, CREATOR, ELOZOTANEVIREKORDID, NNID) VALUES
(0, N'Technikai', 'F', 0, '2018-01-18 00:22:30', '2018-01-18 00:22:30', NULL, NULL, NULL, NULL)
SET IDENTITY_INSERT T_FENNTARTO OFF
END
-- ============================================================== --
-- Az IDENTITY()-s táblák adatainak áttöltése --
-- ============================================================== --
DECLARE tbl_cur CURSOR LOCAL FOR
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN (
SELECT ta.name TableName, SUM(pa.rows) RowCnt
FROM sys.tables ta
INNER JOIN sys.partitions pa ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name, ta.name
HAVING SUM(pa.rows) > 0
) x ON x.TableName = c.TABLE_NAME
WHERE COLUMN_NAME IN (N'C_ALINTEZMENYID', N'C_INTEZMENYID')
AND TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'dbo')
AND TABLE_NAME NOT IN (N'T_ENTITYATTRIBUTEHISTORY', N'T_ENTITYHISTORY')
AND COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), 'ID', 'IsIdentity') = 1
OPEN tbl_cur
FETCH NEXT FROM tbl_cur
INTO @tableName, @intezmenyIdColumn
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT @tableName
SELECT @columnList = ISNULL(@columnList + ', ', '') + c.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = @tableName AND c.TABLE_SCHEMA = 'dbo' AND c.COLUMN_NAME NOT IN (N'ID', @intezmenyIdColumn)
SET @sql = N'
INSERT INTO ' + @tableName + ' (ID, ' + @intezmenyIdColumn + ', ' + @columnList + ')
SELECT t.[newId], @newIntezmenyId, ' + @columnList + '
FROM ' + @pSourceDatabase + '.dbo.' + @tableName + ' x
INNER JOIN MappingTable t ON t.oldId = x.ID AND t.tableName = ''' + @tableName + '''
WHERE ' + @intezmenyIdColumn + ' = @intId'
SET @sql = N'
SET IDENTITY_INSERT ' + @tableName + ' ON' + @sql + '
SET IDENTITY_INSERT ' + @tableName + ' OFF'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@intId int, @newIntezmenyId int', @pSourceIntezmenyId, @newIntezmenyId
SET @columnList = NULL
FETCH NEXT FROM tbl_cur
INTO @tableName, @intezmenyIdColumn
END
CLOSE tbl_cur
DEALLOCATE tbl_cur
-- ============================================================== --
-- Az Intézmény adatainak áttöltése --
-- ============================================================== --
SET @sql = '
SET IDENTITY_INSERT T_INTEZMENY ON
INSERT INTO T_INTEZMENY (ID, C_AZONOSITO, C_FENNTARTOAZONOSITO, C_NEPTUNNAPLOLINK, TOROLT, SERIAL, LASTCHANGED, CREATED, MODIFIER, CREATOR, C_FENNTARTOID)
SELECT @newIntezmenyId, C_AZONOSITO, C_FENNTARTOAZONOSITO, C_NEPTUNNAPLOLINK, TOROLT, SERIAL, LASTCHANGED, CREATED, MODIFIER, CREATOR, C_FENNTARTOID
FROM ' + @pSourceDatabase + '.dbo.T_INTEZMENY x
INNER JOIN MappingTable t ON x.ID = t.oldId AND t.tableName = ''T_INTEZMENY''
SET IDENTITY_INSERT T_INTEZMENY OFF
'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@newIntezmenyId int, @fenntartoAzonosito nvarchar(3)', @newIntezmenyId, @fenntartoAzonosito
-- ============================================================== --
-- A nem IDENTITY()-s táblák adatainak áttöltése --
-- ============================================================== --
SELECT
@newIntezmenyId = t1.[newId]
FROM MappingTable t1 WHERE t1.tableName = 'T_INTEZMENY'
DECLARE tbl_cur CURSOR LOCAL FOR
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN (
SELECT ta.name TableName, SUM(pa.rows) RowCnt
FROM sys.tables ta
INNER JOIN sys.partitions pa ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name, ta.name
HAVING SUM(pa.rows) > 0
) x ON x.TableName = c.TABLE_NAME
WHERE COLUMN_NAME = N'C_ALINTEZMENYID'
AND TABLE_NAME IN (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'dbo')
AND TABLE_NAME NOT IN (N'T_ENTITYATTRIBUTEHISTORY', N'T_ENTITYHISTORY')
AND COLUMNPROPERTY(OBJECT_ID(TABLE_NAME), 'ID', 'IsIdentity') = 0
OPEN tbl_cur
FETCH NEXT FROM tbl_cur
INTO @tableName, @intezmenyIdColumn
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT @tableName
SELECT @columnList = ISNULL(@columnList + ', ', '') + c.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = @tableName AND c.TABLE_SCHEMA = 'dbo' AND c.COLUMN_NAME NOT IN (N'ID', @intezmenyIdColumn)
SET @sql = N'
INSERT INTO ' + @tableName + ' (ID, ' + @intezmenyIdColumn + ', ' + @columnList + ')
SELECT t.[newId], @newIntezmenyId, ' + @columnList + '
FROM ' + @pSourceDatabase + '.dbo.' + @tableName + ' x
INNER JOIN MappingTable t ON t.oldId = x.ID AND t.tableName = ''' + @tableName + '''
WHERE ' + @intezmenyIdColumn + ' = @intId'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@intId int, @newIntezmenyId int', @pSourceIntezmenyId, @newIntezmenyId
SET @columnList = NULL
FETCH NEXT FROM tbl_cur
INTO @tableName, @intezmenyIdColumn
END
CLOSE tbl_cur
DEALLOCATE tbl_cur
-- ================================================================================ --
-- Kapcsolótáblák migrálása, ezt külön kell, mert nincsen nekik C_INTEZMENYID-juk --
-- ================================================================================ --
DECLARE tbl_cur CURSOR LOCAL FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES t
WHERE t.TABLE_NAME NOT IN (
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'ID'
)
AND t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_NAME LIKE 'T[_]%'
AND t.TABLE_SCHEMA = 'dbo'
AND t.TABLE_NAME NOT IN ('T_EVFOLYAMTIPUS_OKTATASINEVELE')
OPEN tbl_cur
FETCH NEXT FROM tbl_cur
INTO @tableName
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT TOP(1)
@firstParentCol = pc.[name]-- AS parent_column_name
,@firstRefObj = OBJECT_NAME(rc.[object_id]) --as referenced_object_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 parent_object_id = OBJECT_ID(@tableName)
ORDER BY f.constraint_object_id ASC
SELECT TOP(1)
@secondParentCol = pc.[name]-- AS parent_column_name
,@secondRefObj = OBJECT_NAME(rc.[object_id]) --as referenced_object_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 parent_object_id = OBJECT_ID(@tableName)
ORDER BY f.constraint_object_id DESC
SET @sql = N'
INSERT INTO ' + @tableName + ' (' + @firstParentCol + ', ' + @secondParentCol + ')
SELECT DISTINCT t1.[newId] AS ' + @firstParentCol + ', t2.[newId] AS ' + @secondParentCol + '
FROM ' + @pSourceDatabase + '.dbo.' + @tableName + ' x
INNER JOIN MappingTable t1 ON t1.tableName = ''' + @firstRefObj + ''' AND ' + @firstParentCol + ' = t1.oldId
INNER JOIN MappingTable t2 ON t2.tableName = ''' + @secondRefObj + ''' AND ' + @secondParentCol + ' = t2.oldId'
--SELECT @sql
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql
FETCH NEXT FROM tbl_cur
INTO @tableName
END
CLOSE tbl_cur
DEALLOCATE tbl_cur
-- ============================================================== --
-- A T_DICTIONARYITEMBASE altáblák miglálása (100k alatt) --
-- ============================================================== --
DECLARE tbl_cur CURSOR LOCAL FOR
SELECT OBJECT_NAME(parent_object_id)
FROM sys.foreign_keys
WHERE referenced_object_id = OBJECT_ID('T_DICTIONARYITEMBASE')
SELECT @newIntezmenyId = t1.[newId] FROM MappingTable t1 WHERE t1.tableName = 'T_INTEZMENY'
OPEN tbl_cur
FETCH NEXT FROM tbl_cur
INTO @tableName
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @columnList = ISNULL(@columnList + ', ', '') + c.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = @tableName AND c.TABLE_SCHEMA = 'dbo' AND c.COLUMN_NAME NOT IN (N'ID', N'C_ALINTEZMENYID')
SET @sql = N'
INSERT INTO ' + @tableName + ' (ID, C_ALINTEZMENYID, ' + @columnList + ')
SELECT ID, @newIntezmenyId, ' + @columnList + '
FROM ' + @pSourceDatabase + '.dbo.' + @tableName + ' x
WHERE C_ALINTEZMENYID = @intId AND ID < 100000'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@intId int, @newIntezmenyId int', @pSourceIntezmenyId, @newIntezmenyId
SET @columnList = NULL
FETCH NEXT FROM tbl_cur
INTO @tableName
END
CLOSE tbl_cur
DEALLOCATE tbl_cur
-- ============================================================== --
-- A T_DICTIONARYITEMBASE miglálása (100k alatt) --
-- ============================================================== --
SELECT @newIntezmenyId = t1.[newId]
FROM MappingTable t1
WHERE t1.tableName = 'T_INTEZMENY'
SET @sql = '
SET IDENTITY_INSERT T_DICTIONARYITEMBASE ON
INSERT INTO T_DICTIONARYITEMBASE (ID, C_VALUE, C_NAME, C_NAME_1, C_NAME_2, C_NAME_3, C_NAME_4, C_VISIBLE, C_TYPE, C_PROTECTED, C_INTEZMENYID, C_TANEVID, TOROLT, SERIAL, LASTCHANGED, CREATED, MODIFIER, CREATOR, C_ORDER, C_DICTIONARYTYPEID)
SELECT ID, C_VALUE, C_NAME, C_NAME_1, C_NAME_2, C_NAME_3, C_NAME_4, C_VISIBLE, C_TYPE, C_PROTECTED, @newIntezmenyId, C_TANEVID, TOROLT, SERIAL, LASTCHANGED, CREATED, MODIFIER, CREATOR, C_ORDER, C_DICTIONARYTYPEID
FROM ' + @pSourceDatabase + '.dbo.T_DICTIONARYITEMBASE x
WHERE C_INTEZMENYID = @pSourceIntezmenyId AND ID < 100000
SET IDENTITY_INSERT T_DICTIONARYITEMBASE OFF'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@pSourceIntezmenyId int, @newIntezmenyId int', @pSourceIntezmenyId, @newIntezmenyId
-- ============================================================== --
-- DICTIONARYTYPE külön kell áttölteni --
-- ============================================================== --
SET @sql = N'
SET IDENTITY_INSERT T_DICTIONARYTYPE ON
INSERT INTO T_DICTIONARYTYPE (ID, C_CODENAME, C_DESCRIPTION, C_ISCOLOREDITABLE, C_ISCUSTOMITEMALLOWED, C_NAME, C_INTEZMENYID, C_TANEVID, TOROLT, SERIAL, LASTCHANGED, CREATED, MODIFIER, CREATOR, ELOZOTANEVIREKORDID, NNID)
SELECT ID, C_CODENAME, C_DESCRIPTION, C_ISCOLOREDITABLE, C_ISCUSTOMITEMALLOWED, C_NAME, @newIntezmenyId, C_TANEVID, TOROLT, SERIAL, LASTCHANGED, CREATED, MODIFIER, CREATOR, ELOZOTANEVIREKORDID, NNID
FROM ' + @pSourceDatabase + '.dbo.T_DICTIONARYTYPE
WHERE C_INTEZMENYID = @intId
SET IDENTITY_INSERT T_DICTIONARYTYPE OFF'
PRINT @sql
EXEC sp_executesql @sql, N'@intId int, @newIntezmenyId int', @pSourceIntezmenyId, @newIntezmenyId
-- ================================================================================ --
-- T_EVFOLYAMTIPUS_OKTATASINEVELE táblát külön kell kezelni --
-- ================================================================================ --
SET @sql = '
INSERT INTO T_EVFOLYAMTIPUS_OKTATASINEVELE (C_EVFOLYAMTIPUSID, C_OKTATASINEVELESIFELADATID, C_INTEZMENYID, C_TANEVID)
SELECT ISNULL(eft.[newId], eo.C_EVFOLYAMTIPUSID), ISNULL(onf.[newId], eo.C_OKTATASINEVELESIFELADATID), @newIntezmenyId, t.[newId]
FROM ' + @pSourceDatabase + '.dbo.T_EVFOLYAMTIPUS_OKTATASINEVELE eo
INNER JOIN MappingTable t ON eo.C_TANEVID = t.oldId AND t.tableName = ''T_TANEV''
LEFT JOIN MappingTable onf ON eo.C_OKTATASINEVELESIFELADATID = onf.oldId AND onf.tableName = ''T_OKTATASINEVELESIFELADAT''
LEFT JOIN MappingTable eft ON eo.C_EVFOLYAMTIPUSID = eft.oldId AND eft.tableName = ''T_EVFOLYAMTIPUS''
WHERE eo.C_INTEZMENYID = @pSourceIntezmenyId'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@pSourceIntezmenyId int, @newIntezmenyId int', @pSourceIntezmenyId, @newIntezmenyId
-- ================================================================================ --
-- Az ENTITY HISTORY áttöltése --
-- ================================================================================ --
IF @pEntityHistoryMigration IN (1, 2) BEGIN
SET @sql = N'
SET IDENTITY_INSERT T_ENTITYHISTORY ON
INSERT INTO T_ENTITYHISTORY (ID, C_ALTERATIONDATE, C_ENTITYID, C_ENTITYNAME, C_REASON, C_FELHASZNALOID, C_INTEZMENYID, C_TANEVID, CREATED)
SELECT t.[newId], x.C_ALTERATIONDATE, x.C_ENTITYID, x.C_ENTITYNAME, x.C_REASON, x.C_FELHASZNALOID, @newIntezmenyId, x.C_TANEVID, x.CREATED
FROM ' + @pSourceDatabase + '.dbo.T_ENTITYHISTORY x
INNER JOIN MappingTable t ON t.oldId = x.ID AND t.tableName = ''T_ENTITYHISTORY''
WHERE x.C_INTEZMENYID = @pSourceIntezmenyId
SET IDENTITY_INSERT T_ENTITYHISTORY OFF'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@newIntezmenyId int, @pSourceIntezmenyId int', @newIntezmenyId, @pSourceIntezmenyId
SET @sql = N'
INSERT INTO T_ENTITYATTRIBUTEHISTORY (C_CURRENTVALUE, C_ORIGINALVALUE, C_PROPERTYNAME, C_ENTITYHISTORYID)
SELECT C_CURRENTVALUE, C_ORIGINALVALUE, C_PROPERTYNAME, t.[newId]
FROM ' + @pSourceDatabase + '.dbo.T_ENTITYATTRIBUTEHISTORY e
INNER JOIN MappingTable t ON e.C_ENTITYHISTORYID = t.oldId AND t.tableName = ''T_ENTITYHISTORY'';'
RAISERROR (@sql, 10, 1) WITH NOWAIT
EXEC sp_executesql @sql, N'@newIntezmenyId int, @pSourceIntezmenyId int', @newIntezmenyId, @pSourceIntezmenyId
END
END
GO