DROP PROCEDURE IF EXISTS uspUpdateIDPEgyediAzonosito GO CREATE PROCEDURE uspUpdateIDPEgyediAzonosito AS BEGIN -- Ez az eljárás az IDP egyedi azonosítók frissítétéhez használható SET NOCOUNT ON; -- FELHASZNÁLÓ esetén -- 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(), akt.LASTCHANGED = GETDATE(), akt.MODIFIER = 0 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, LASTCHANGED = GETDATE(), MODIFIER = 0 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_ADOAZONOSITOJEL, '') = ISNULL(pre.C_ADOAZONOSITOJEL, '') 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' AND pre.TOROLT = 'F' -- 9 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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_ADOAZONOSITOJEL, '') = ISNULL(pre.C_ADOAZONOSITOJEL, '') 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' AND pre.TOROLT = 'F' -- 8 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 7 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 6 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 5 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 4 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 3 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 3 azonosítóval UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 3. lépés: összes hiányzó IDP kitöltése más tanévekben UPDATE pre SET pre.C_IDPEGYEDIAZONOSITO = pre.C_EGYEDIAZONOSITO , LASTCHANGED = GETDATE(), MODIFIER = 0 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' AND pre.TOROLT = 'F' -- 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(), LASTCHANGED = GETDATE(), MODIFIER = 0 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, MIN(ID) MIN_ID FROM T_FELHASZNALO_OSSZES fh WHERE fh.TOROLT = 'F' 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.MIN_ID WHERE akt.C_IDPEGYEDIAZONOSITO <> '00000000-0000-0000-0000-000000000000' AND akt.TOROLT = 'F' -- 5. lépés: ha még mindíg maradt volna valaki akinek nincs ID-ja UPDATE T_FELHASZNALO_OSSZES SET C_IDPEGYEDIAZONOSITO = NEWID() , LASTCHANGED = GETDATE(), MODIFIER = 0 WHERE C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000' AND TOROLT = 'F' -- GONDVISELŐ esetén -- 1. lépés: alkalmazzuk az egyedi azonosítót, ha még nincs IDP UPDATE T_GONDVISELO_OSSZES SET C_IDPEGYEDIAZONOSITO = C_EGYEDIAZONOSITO, LASTCHANGED = GETDATE(), MODIFIER = 0 WHERE C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000' AND TOROLT = 'F' -- 2. lépés: hiányzó azonosítók generálása UPDATE T_GONDVISELO_OSSZES SET C_IDPEGYEDIAZONOSITO = NEWID(), LASTCHANGED = GETDATE(), MODIFIER = 0 WHERE C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000' AND TOROLT = 'F' -- 3. lépés: biztosítjuk a tanéven belüli egyediséget -- (megj: ez nem teljesen jó módszer, mert így meglévő azonosítókat is elronthatunk) UPDATE akt SET akt.C_IDPEGYEDIAZONOSITO = NEWID(), LASTCHANGED = GETDATE(), MODIFIER = 0 FROM T_GONDVISELO_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, MIN(ID) MIN_ID FROM T_GONDVISELO_OSSZES g WHERE g.TOROLT = 'F' 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.MIN_ID WHERE akt.C_IDPEGYEDIAZONOSITO <> '00000000-0000-0000-0000-000000000000' AND akt.TOROLT = 'F' END GO