DROP PROCEDURE IF EXISTS [dev].[uspGenerateKIRSZIRFELADATELLATASIHELY] GO CREATE PROCEDURE [dev].[uspGenerateKIRSZIRFELADATELLATASIHELY] @TanevNev nvarchar(9) = NULL AS BEGIN DECLARE @datetime datetime = CONCAT(LEFT(@TanevNev, 4),'-10-01') DROP TABLE IF EXISTS #KIRSZIRFELADATELLATASIHELY CREATE TABLE #KIRSZIRFELADATELLATASIHELY ( ID int NOT NULL IDENTITY(1,1), C_FELADATELLATASIHELYID int NOT NULL, C_MUKODESIHELYNEV nvarchar(255) NOT NULL, C_MUKODESIHELYID int, C_OKTATASINEVELESIFELADATNEV nvarchar(500) NOT NULL, C_OKTATASINEVELESIFELADATTIPUS int, C_DATUM datetime NOT NULL, C_FELADATKATEGORIAID int NOT NULL, C_INTEZMENYID int NOT NULL, C_TANEVID int NOT NULL, TOROLT char(1) NOT NULL DEFAULT 'F', SERIAL int DEFAULT 0 NOT NULL, LASTCHANGED datetime DEFAULT GETDATE() NOT NULL, CREATED datetime DEFAULT GETDATE() NOT NULL, MODIFIER int NULL, CREATOR int NULL, ELOZOTANEVIREKORDID int NULL ) INSERT INTO #KIRSZIRFELADATELLATASIHELY ( C_FELADATELLATASIHELYID ,C_MUKODESIHELYNEV ,C_MUKODESIHELYID ,C_OKTATASINEVELESIFELADATNEV ,C_OKTATASINEVELESIFELADATTIPUS ,C_INTEZMENYID ,C_TANEVID ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,MODIFIER ,CREATOR ,ELOZOTANEVIREKORDID ,C_DATUM ,C_FELADATKATEGORIAID ) SELECT fh.ID AS C_FELADATELLATASIHELYID -- * int ,mh.C_NEV AS C_MUKODESIHELYNEV -- * nvarchar(255) ,fh.C_MUKODESIHELYID AS C_MUKODESIHELYID ,d.C_NAME AS C_OKTATASINEVELESIFELADATNEV -- * nvarchar(500) ,fh.C_OKTATASINEVELESIFELADATTIPUS AS C_OKTATASINEVELESIFELADATTIPUS ,fh.C_INTEZMENYID AS C_INTEZMENYID -- * int ,fh.C_TANEVID AS C_TANEVID -- * int ,fh.TOROLT AS TOROLT -- * char(1) ,0 AS SERIAL -- * int ,GETDATE() AS LASTCHANGED -- * datetime ,GETDATE() AS CREATED -- * datetime ,NULL AS MODIFIER -- int ,NULL AS CREATOR -- int ,NULL AS ELOZOTANEVIREKORDID -- int ,@datetime AS C_DATUM -- * datetime ,onf.C_FELADATKATEGORIAID AS C_FELADATKATEGORIAID -- * int FROM T_FELADATELLATASIHELY fh INNER JOIN T_MUKODESIHELY mh ON mh.ID = fh.C_MUKODESIHELYID INNER JOIN T_DICTIONARYITEMBASE d ON d.ID = fh.C_OKTATASINEVELESIFELADATTIPUS AND d.C_TANEVID = fh.C_TANEVID INNER JOIN T_OKTATASINEVELESIFELADAT onf ON onf.ID = d.ID AND onf.C_ALTANEVID = d.C_TANEVID INNER JOIN T_TANEV tv ON tv.ID = fh.C_TANEVID AND tv.C_NEV = @TanevNev INNER JOIN T_INTEZMENYADATOK ia on ia.C_TANEVID = fh.C_TANEVID and ia.TOROLT = 'F' and ia.C_ISSZAKKEPZO = 'F' WHERE NOT EXISTS (SELECT 1 FROM T_KIRSZIRFELADATELLATASIHELY kszfh WHERE kszfh.C_FELADATELLATASIHELYID = fh.ID) DECLARE @sql nvarchar(max) = '' -- Feladatellátási hely adatainak visszaállítása SELECT @sql += sqlCmd FROM( SELECT DISTINCT 'UPDATE #KIRSZIRFELADATELLATASIHELY ' + CASE WHEN eh.C_REASON='New' THEN 'SET TOROLT = ''T''' WHEN eh.C_REASON='Modified' THEN 'SET ' + eh.C_PROPERTYNAME + ' = '+ISNULL(''''+eh.C_ORIGINALVALUE+'''','NULL ') END + ' WHERE ID = ' + CAST(eh.C_ENTITYID AS varchar) +';' + CHAR(13) + CHAR(10) sqlCmd, eh.C_ALTERATIONDATE FROM V_ENTITYHISTORY eh INNER JOIN #KIRSZIRFELADATELLATASIHELY fh ON fh.C_FELADATELLATASIHELYID = eh.C_ENTITYID WHERE eh.C_ENTITYNAME = 'T_FELADATELLATASIHELY' AND eh.C_ALTERATIONDATE >= @datetime + 1 AND eh.C_PROPERTYNAME IN ('C_MUKODESIHELYID', 'TOROLT', 'C_OKTATASINEVELESIFELADATTIPUS') ) x WHERE x.sqlCmd IS NOT NULL ORDER BY x.C_ALTERATIONDATE DESC -- T_MUKODESIHELY nevének visszaállítása SELECT @sql += sqlCmd FROM( SELECT DISTINCT 'UPDATE #KIRSZIRFELADATELLATASIHELY ' + CASE WHEN eh.C_REASON='New' THEN 'SET TOROLT = ''T''' WHEN eh.C_REASON='Modified' THEN 'SET C_MUKODESIHELYNEV = ' + ISNULL(''''+eh.C_ORIGINALVALUE+'''','NULL') END + ' WHERE C_MUKODESIHELYID = ' + CAST(eh.C_ENTITYID AS varchar) +';' + CHAR(13) + CHAR(10) sqlCmd, eh.C_ALTERATIONDATE FROM V_ENTITYHISTORY eh INNER JOIN #KIRSZIRFELADATELLATASIHELY fh ON fh.C_MUKODESIHELYID = eh.C_ENTITYID WHERE eh.C_ENTITYNAME = 'T_MUKODESIHELY' AND eh.C_ALTERATIONDATE >= @datetime + 1 AND eh.C_PROPERTYNAME = 'C_NEV' ) x WHERE x.sqlCmd IS NOT NULL ORDER BY x.C_ALTERATIONDATE DESC -- C_OKTATASINEVELESIFELADATTIPUS nevének visszaállítása SELECT @sql += sqlCmd FROM( SELECT DISTINCT 'UPDATE #KIRSZIRFELADATELLATASIHELY ' + CASE WHEN eh.C_REASON='New' THEN 'SET TOROLT = ''T''' WHEN eh.C_REASON='Modified' THEN 'SET C_OKTATASINEVELESIFELADATNEV = ' + ISNULL(''''+eh.C_ORIGINALVALUE+'''','NULL') END+ ' WHERE C_OKTATASINEVELESIFELADATTIPUS = ' + CAST(eh.C_ENTITYID AS varchar) + ' AND C_TANEVID = ' + CAST(eh.C_TANEVID AS varchar) + ';' + CHAR(13) + CHAR(10) sqlCmd, eh.C_ALTERATIONDATE FROM V_ENTITYHISTORY eh INNER JOIN #KIRSZIRFELADATELLATASIHELY fh ON fh.C_OKTATASINEVELESIFELADATTIPUS = eh.C_ENTITYID AND fh.C_TANEVID = eh.C_TANEVID WHERE eh.C_ENTITYNAME = 'T_DICTIONARYITEMBASE' AND eh.C_ALTERATIONDATE >= @datetime + 1 AND eh.C_PROPERTYNAME = 'C_NEV' ) x WHERE x.sqlCmd IS NOT NULL ORDER BY x.C_ALTERATIONDATE DESC EXEC sp_executesql @sql INSERT INTO T_KIRSZIRFELADATELLATASIHELY ( C_FELADATELLATASIHELYID ,C_MUKODESIHELYNEV ,C_OKTATASINEVELESIFELADATNEV ,C_INTEZMENYID ,C_TANEVID ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,MODIFIER ,CREATOR ,ELOZOTANEVIREKORDID ,C_DATUM ,C_FELADATKATEGORIAID ) SELECT C_FELADATELLATASIHELYID ,C_MUKODESIHELYNEV ,C_OKTATASINEVELESIFELADATNEV ,C_INTEZMENYID ,C_TANEVID ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,MODIFIER ,CREATOR ,ELOZOTANEVIREKORDID ,C_DATUM ,C_FELADATKATEGORIAID FROM #KIRSZIRFELADATELLATASIHELY END GO