263 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			263 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
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;
 | 
						|
 | 
						|
 | 
						|
-- 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()
 | 
						|
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'
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-- 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
 | 
						|
WHERE C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-- 2. lépés: hiányzó azonosítók generálása
 | 
						|
UPDATE T_GONDVISELO_OSSZES 
 | 
						|
SET C_IDPEGYEDIAZONOSITO = NEWID()
 | 
						|
WHERE C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-- 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()
 | 
						|
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, MAX(ID) MAX_ID
 | 
						|
    FROM T_GONDVISELO_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'; |