DROP PROCEDURE IF EXISTS uspUpdateIDPEgyediAzonosito GO CREATE PROCEDURE uspUpdateIDPEgyediAzonosito AS -- Ez az eljárás az IDP egyedi azonosítók frissítétéhez használható SET NOCOUNT ON; -- 1. lépés: összes hiányzó IDP kitöltése egy uj guid-al az aktuális tanévben UPDATE akt SET akt.C_IDPEGYEDIAZONOSITO = NEWID() FROM T_FELHASZNALO_OSSZES akt INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_INTEZMENYID = akt.C_INTEZMENYID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' WHERE 1 = 1 AND akt.TOROLT = 'F' AND akt.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000' AND akt.C_EGYEDIAZONOSITO <> '00000000-0000-0000-0000-000000000000'; -- 2. lépés: Az IDP átvétele előző-következő tanévre -- 10 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV AND akt.C_NEME = pre.C_NEME AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '') AND ISNULL(akt.C_TAJSZAM, '') = ISNULL(pre.C_TAJSZAM, '') AND ISNULL(akt.C_ADOSZAM, '') = ISNULL(pre.C_ADOSZAM, '') AND akt.ELOZOTANEVIREKORDID = pre.ID INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 9 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV AND akt.C_NEME = pre.C_NEME AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '') AND ISNULL(akt.C_TAJSZAM, '') = ISNULL(pre.C_TAJSZAM, '') AND ISNULL(akt.C_ADOSZAM, '') = ISNULL(pre.C_ADOSZAM, '') INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 8 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV AND akt.C_NEME = pre.C_NEME AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '') AND ISNULL(akt.C_TAJSZAM, '') = ISNULL(pre.C_TAJSZAM, '') INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 7 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV AND akt.C_NEME = pre.C_NEME AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '') INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 6 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV AND akt.C_NEME = pre.C_NEME INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 5 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV AND akt.C_NEME = pre.C_NEME INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 4 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND akt.C_SZULETESIHELY = pre.C_SZULETESIHELY AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 3 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_SZULETESINEV = pre.C_SZULETESINEV INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 3 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID AND akt.C_ANYJANEVE = pre.C_ANYJANEVE AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '') AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F' AND pre.C_TANEVID <> akt.C_TANEVID WHERE akt.TOROLT = 'F' AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 3. lépés: összes hiányzó IDP kitöltése más tanévekben UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = pre.C_EGYEDIAZONOSITO FROM T_FELHASZNALO_OSSZES pre INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = pre.C_TANEVID AND akttv.C_INTEZMENYID = pre.C_INTEZMENYID AND akttv.C_AKTIV = 'F' AND akttv.TOROLT = 'F' WHERE pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'; -- 4. lépés: ha az IDP azonosító valamelyik tanévben kétszer is szerepel, -- akkor csak egyet tartunk meg a többinek adunk egy új ID-t UPDATE akt SET akt.C_IDPEGYEDIAZONOSITO = NEWID() FROM T_FELHASZNALO_OSSZES akt INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.TOROLT = 'F' INNER JOIN ( SELECT C_INTEZMENYID, C_TANEVID, C_IDPEGYEDIAZONOSITO, COUNT(*) C, MAX(ID) MAX_ID FROM T_FELHASZNALO_OSSZES GROUP BY C_INTEZMENYID, C_TANEVID, C_IDPEGYEDIAZONOSITO HAVING COUNT(*) > 1 ) dupl ON akt.C_INTEZMENYID = dupl.C_INTEZMENYID AND akt.C_TANEVID = dupl.C_TANEVID AND akt.C_IDPEGYEDIAZONOSITO = dupl.C_IDPEGYEDIAZONOSITO AND akt.ID <> dupl.MAX_ID WHERE akt.C_IDPEGYEDIAZONOSITO <> '00000000-0000-0000-0000-000000000000'; -- 5. lépés: ha még mindíg maradt volna valaki akinek nincs ID-ja UPDATE T_FELHASZNALO_OSSZES SET C_IDPEGYEDIAZONOSITO = NEWID() WHERE C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'