DROP PROCEDURE IF EXISTS uspFollowUpSzervezet GO CREATE PROCEDURE uspFollowUpSzervezet @intezmenyId int ,@aktTanevId int ,@kovetkezoTanevId int ,@szervezetId int AS BEGIN SET NOCOUNT ON; DECLARE @kovSzervezetId int ,@parentSzerverzetId int ,@sql nvarchar(max) ,@insertColList nvarchar(max) ,@selectColList nvarchar(max) ,@updateColList nvarchar(max); IF NOT EXISTS (SELECT * FROM T_TANEV_OSSZES WHERE ID = @kovetkezoTanevId and C_KOVETKEZO = 'T' AND C_AKTIVALVA IS NULL AND C_ISKIVALASZTHATO = 'T') OR EXISTS (SELECT * FROM T_TANEV_OSSZES WHERE ID = @kovetkezoTanevId and C_AKTIV = 'T' AND TOROLT = 'F') RETURN; IF (SELECT TOROLT FROM T_SZERVEZET_OSSZES WHERE ID = @szervezetId) = 'T' RETURN; -- ha név és azonosító alapján nem létezik a következő tanévben, de van következő tanévi rekordja IF @kovSzervezetId IS NULL SELECT @kovSzervezetId = kov.ID FROM T_SZERVEZET_OSSZES kov WHERE kov.TOROLT = 'F' AND kov.C_INTEZMENYID = @intezmenyId AND kov.C_TANEVID = @kovetkezoTanevId AND kov.ELOZOTANEVIREKORDID = @szervezetId; -- ha a következő tanévben már létezik azonos névvel és azonosítóval IF @kovSzervezetId IS NULL SELECT @kovSzervezetId = kov.ID FROM T_SZERVEZET_OSSZES kov WHERE kov.TOROLT = 'F' AND kov.C_INTEZMENYID = @intezmenyId AND kov.C_TANEVID = @kovetkezoTanevId AND EXISTS( SELECT * FROM T_SZERVEZET_OSSZES akt WHERE akt.TOROLT = 'F' AND akt.C_AZONOSITO = kov.C_AZONOSITO AND akt.C_NEV = kov.C_NEV AND akt.C_INTEZMENYID = @intezmenyId AND akt.C_TANEVID = @aktTanevId AND akt.ID = @szervezetId ); IF @parentSzerverzetId IS NULL SELECT @parentSzerverzetId = C_PARENTSZERVEZETID FROM T_SZERVEZET_OSSZES WHERE TOROLT = 'F' AND C_INTEZMENYID = @intezmenyId AND C_TANEVID = @aktTanevId AND ID = @szervezetId; SELECT @insertColList = ISNULL(@insertColList + ', ', '') + insertColname FROM fnGetFollowUpColumnMapping ('C_PARENTSZERVEZETID', 'T_SZERVEZET') ORDER BY insertColName; SELECT @selectColList = ISNULL(@selectColList + ', ', '') + selectColname FROM fnGetFollowUpColumnMapping ('C_PARENTSZERVEZETID', 'T_SZERVEZET') ORDER BY insertColName; SELECT @updateColList = ISNULL(@updateColList + ', ', '') + insertColname + ' = ' + updateColName FROM fnGetFollowUpColumnMapping ('C_PARENTSZERVEZETID', 'T_SZERVEZET') WHERE updateColName > '' ORDER BY insertColName; IF @parentSzerverzetId IS NOT NULL EXEC uspFollowUpSzervezet @intezmenyId, @aktTanevId, @kovetkezoTanevId, @parentSzerverzetId; IF @kovszervezetId IS NULL SET @sql = ' INSERT INTO T_SZERVEZET_OSSZES(' + @insertColList + ', C_PARENTSZERVEZETID) SELECT ' + @selectColList + ', te.ID AS C_PARENTSZERVEZETID FROM T_SZERVEZET_OSSZES s LEFT JOIN T_SZERVEZET_OSSZES te ON te.ELOZOTANEVIREKORDID = s.C_PARENTSZERVEZETID AND te.TOROLT = ''F'' WHERE s.ID = @szervezetId AND s.TOROLT = ''F'' AND NOT EXISTS(SELECT * FROM T_SZERVEZET_OSSZES sz WHERE sz.ELOZOTANEVIREKORDID = s.ID AND sz.TOROLT = ''F'')' ELSE SET @sql = ' UPDATE t SET ' + @updateColList + ', C_PARENTSZERVEZETID = ps.ID FROM T_SZERVEZET_OSSZES t INNER JOIN T_SZERVEZET_OSSZES s ON s.ID = t.ELOZOTANEVIREKORDID AND s.TOROLT = ''F'' LEFT JOIN T_SZERVEZET_OSSZES ps ON ps.ELOZOTANEVIREKORDID = s.C_PARENTSZERVEZETID AND ps.TOROLT = ''F'' WHERE t.ID = @kovszervezetId AND s.ID = @szervezetId AND t.TOROLT = ''F''' --print @sql EXEC sp_executesql @sql, N' @intezmenyId int ,@aktTanevId int ,@kovetkezoTanevId int ,@szervezetId int ,@kovszervezetId int' ,@intezmenyId = @intezmenyId ,@aktTanevId = @aktTanevId ,@kovetkezoTanevId = @kovetkezoTanevId ,@szervezetId = @szervezetId ,@kovszervezetId = @kovszervezetId END GO