DROP PROCEDURE IF EXISTS uspTantargyfelosztasImport GO CREATE PROCEDURE uspTantargyfelosztasImport @pIntezmenyId int ,@pTanevId int ,@pUserId int ,@pImportJson nvarchar(max) ,@pIsTorles bit AS BEGIN SET NOCOUNT ON; DECLARE @tableNameList nvarchar(2000) = 'T_TANTARGY_OSSZES,T_OSZTALYCSOPORT_OSSZES' ,@actualJson nvarchar(max) = '' ,@lastChangedDateTime datetime = GETDATE() --Ha törlés van, akkor a kapcsolódások törlésével kell kezdenünk! IF (@pIsTorles = 1) BEGIN --Foglalkozás kapcsolatainak törlése UPDATE oo SET oo.C_FOGLALKOZASID = NULL ,oo.SERIAL = oo.SERIAL + 1 ,oo.LASTCHANGED = @lastChangedDateTime ,oo.MODIFIER = @pUserId FROM T_ORARENDIORA_OSSZES oo WHERE oo.C_INTEZMENYID = @pIntezmenyId AND oo.C_TANEVID = @pTanevId AND oo.TOROLT = 'F' AND EXISTS ( SELECT TOP 1 ID FROM T_FOGLALKOZAS_OSSZES fg WHERE fg.ID = oo.C_FOGLALKOZASID AND fg.C_INTEZMENYID = @pIntezmenyId AND fg.C_TANEVID = @pTanevId AND fg.TOROLT = 'F' AND fg.C_IMPORTALT = 'T' ) UPDATE tao SET tao.C_FOGLALKOZASID = NULL ,tao.SERIAL = tao.SERIAL + 1 ,tao.LASTCHANGED = @lastChangedDateTime ,tao.MODIFIER = @pUserId FROM T_TANITASIORA_OSSZES tao WHERE tao.C_INTEZMENYID = @pIntezmenyId AND tao.C_TANEVID = @pTanevId AND tao.TOROLT = 'F' AND EXISTS ( SELECT TOP 1 ID FROM T_FOGLALKOZAS_OSSZES fg WHERE fg.ID = tao.C_FOGLALKOZASID AND fg.C_INTEZMENYID = @pIntezmenyId AND fg.C_TANEVID = @pTanevId AND fg.TOROLT = 'F' AND fg.C_IMPORTALT = 'T' ) END --NOTE: A törlés azért false, mert a T_TANTARGY_OSSZES és a T_OSZTALYCSOPORT_OSSZES view-ból nem törlünk importnál! EXECUTE uspDynamicImportJsonSplit @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList --NOTE: Osztály temp tábla incializálása CREATE TABLE #OsztalyTempTable ( ID int ,C_KETTANNYELVU char(1) ,C_NEMZETISEGI char(1) ,C_NYELVIELOKESZITO char(1) ,C_SPORT char(1) ,C_ALINTEZMENYID int ,C_ALTANEVID int ,TOROLT char(1) ,SERIAL int ,LASTCHANGED datetime ,CREATED datetime ,MODIFIER int ,CREATOR int ,ELOZOTANEVIREKORDID int ,Operation int ) INSERT INTO #OsztalyTempTable SELECT ocs.ID ,o.C_KETTANNYELVU ,o.C_NEMZETISEGI ,o.C_NYELVIELOKESZITO ,o.C_SPORT ,o.C_ALINTEZMENYID ,o.C_ALTANEVID ,o.TOROLT ,o.SERIAL ,o.LASTCHANGED ,o.CREATED ,o.MODIFIER ,o.CREATOR ,o.ELOZOTANEVIREKORDID ,o.Operation FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_OSZTALY_OSSZES') WITH ( ID int '$.ID' ,C_KETTANNYELVU char(1) '$.C_KETTANNYELVU' ,C_NEMZETISEGI char(1) '$.C_NEMZETISEGI' ,C_NYELVIELOKESZITO char(1) '$.C_NYELVIELOKESZITO' ,C_SPORT char(1) '$.C_SPORT' ,C_ALINTEZMENYID int '$.C_INTEZMENYID' ,C_ALTANEVID int '$.C_TANEVID' ,TOROLT char(1) '$.TOROLT' ,SERIAL int '$.SERIAL' ,LASTCHANGED datetime '$.LASTCHANGED' ,CREATED datetime '$.CREATED' ,MODIFIER int '$.MODIFIER' ,CREATOR int '$.CREATOR' ,ELOZOTANEVIREKORDID int '$.ELOZOTANEVIREKORDID' ,Operation int '$.Operation' ,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev' ) o LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk: -- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(o.OsztalyCsoportNev) AND ocs.C_INTEZMENYID = @pIntezmenyId AND ocs.C_TANEVID = @pTanevId AND ocs.TOROLT = 'F' AND o.ID IS NULL --NOTE: Csoport temp tábla incializálása CREATE TABLE #CsoportTempTable ( ID int ,C_TIPUSA int ,C_OSZTALYBONTASID int ,C_ALINTEZMENYID int ,C_ALTANEVID int ,TOROLT char(1) ,SERIAL int ,LASTCHANGED datetime ,CREATED datetime ,MODIFIER int ,CREATOR int ,ELOZOTANEVIREKORDID int ,Operation int ) INSERT INTO #CsoportTempTable SELECT ocs.ID ,cs.C_TIPUSA ,ob.ID ,cs.C_ALINTEZMENYID ,cs.C_ALTANEVID ,cs.TOROLT ,cs.SERIAL ,cs.LASTCHANGED ,cs.CREATED ,cs.MODIFIER ,cs.CREATOR ,cs.ELOZOTANEVIREKORDID ,cs.Operation FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_CSOPORT_OSSZES') WITH ( ID int '$.ID' ,C_TIPUSA int '$.C_TIPUSA' ,C_OSZTALYBONTASID int '$.C_OSZTALYBONTASID' ,C_ALINTEZMENYID int '$.C_INTEZMENYID' ,C_ALTANEVID int '$.C_TANEVID' ,TOROLT char(1) '$.TOROLT' ,SERIAL int '$.SERIAL' ,LASTCHANGED datetime '$.LASTCHANGED' ,CREATED datetime '$.CREATED' ,MODIFIER int '$.MODIFIER' ,CREATOR int '$.CREATOR' ,ELOZOTANEVIREKORDID int '$.ELOZOTANEVIREKORDID' ,Operation int '$.Operation' ,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev' ,OsztalybontasNev nvarchar(255) '$.OsztalybontasNev' ) cs LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk: -- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(cs.OsztalyCsoportNev) AND ocs.C_INTEZMENYID = @pIntezmenyId AND ocs.C_TANEVID = @pTanevId AND ocs.TOROLT = 'F' AND cs.ID IS NULL LEFT JOIN T_OSZTALYCSOPORT_OSSZES ob ON --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk: -- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ob.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(cs.OsztalybontasNev) AND ob.C_INTEZMENYID = @pIntezmenyId AND ob.C_TANEVID = @pTanevId AND ob.TOROLT = 'F' AND cs.ID IS NULL --NOTE: Foglalkozas temp tábla incializálása CREATE TABLE #FoglalkozasTempTable ( ID int ,C_TANARID int ,C_TANTARGYID int ,C_OSZTALYCSOPORTID int ,C_FOGLALKOZASTIPUSA int ,C_ORASZAM numeric(10,2) ,C_NEV nvarchar(255) ,C_ERTEKELESKELL char(1) ,C_MULASZTASKELL char(1) ,C_TANARFELVEHETI char(1) ,C_TULORASZAM numeric(10,2) ,C_ISOSSZEVONTORA char(1) ,C_ISNEMZETISEGI char(1) ,C_MEGBIZASIORASZAM numeric(10,2) ,C_IMPORTALT char(1) ,C_INTEZMENYID int ,C_TANEVID int ,TOROLT char(1) ,SERIAL int ,LASTCHANGED datetime ,CREATED datetime ,MODIFIER int ,CREATOR int ,ELOZOTANEVIREKORDID int ,Operation int ) INSERT INTO #FoglalkozasTempTable SELECT fg.ID ,fg.C_TANARID ,tt.ID ,ocs.ID ,fg.C_FOGLALKOZASTIPUSA ,fg.C_ORASZAM ,fg.C_NEV ,fg.C_ERTEKELESKELL ,fg.C_MULASZTASKELL ,fg.C_TANARFELVEHETI ,fg.C_TULORASZAM ,fg.C_ISOSSZEVONTORA ,fg.C_ISNEMZETISEGI ,fg.C_MEGBIZASIORASZAM ,fg.C_IMPORTALT ,fg.C_INTEZMENYID ,fg.C_TANEVID ,fg.TOROLT ,fg.SERIAL ,fg.LASTCHANGED ,fg.CREATED ,fg.MODIFIER ,fg.CREATOR ,fg.ELOZOTANEVIREKORDID ,fg.Operation FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_FOGLALKOZAS_OSSZES') WITH ( ID int '$.ID' ,C_TANARID int '$.C_TANARID' ,C_FOGLALKOZASTIPUSA int '$.C_FOGLALKOZASTIPUSA' ,C_ORASZAM numeric(10,2) '$.C_ORASZAM' ,C_NEV nvarchar(255) '$.C_NEV' ,C_ERTEKELESKELL char(1) '$.C_ERTEKELESKELL' ,C_MULASZTASKELL char(1) '$.C_MULASZTASKELL' ,C_TANARFELVEHETI char(1) '$.C_TANARFELVEHETI' ,C_TULORASZAM numeric(10,2) '$.C_TULORASZAM' ,C_ISOSSZEVONTORA char(1) '$.C_ISOSSZEVONTORA' ,C_ISNEMZETISEGI char(1) '$.C_ISNEMZETISEGI' ,C_MEGBIZASIORASZAM numeric(10,2) '$.C_MEGBIZASIORASZAM' ,C_IMPORTALT char(1) '$.C_IMPORTALT' ,C_INTEZMENYID int '$.C_INTEZMENYID' ,C_TANEVID int '$.C_TANEVID' ,TOROLT char(1) '$.TOROLT' ,SERIAL int '$.SERIAL' ,LASTCHANGED datetime '$.LASTCHANGED' ,CREATED datetime '$.CREATED' ,MODIFIER int '$.MODIFIER' ,CREATOR int '$.CREATOR' ,ELOZOTANEVIREKORDID int '$.ELOZOTANEVIREKORDID' ,Operation int '$.Operation' ,TantargyNev nvarchar(255) '$.TantargyNev' ,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev' ) fg LEFT JOIN T_TANTARGY_OSSZES tt ON --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk: -- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(tt.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(fg.TantargyNev) AND tt.C_INTEZMENYID = @pIntezmenyId AND tt.C_TANEVID = @pTanevId AND tt.TOROLT = 'F' LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk: -- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(fg.OsztalyCsoportNev) AND ocs.C_INTEZMENYID = @pIntezmenyId AND ocs.C_TANEVID = @pTanevId AND ocs.TOROLT = 'F' --Osztályok beszúrása SET @actualJson = ' { "ImportJson":{ "T_OSZTALY_OSSZES":' + ( SELECT o.ID ,o.C_KETTANNYELVU ,o.C_NEMZETISEGI ,o.C_NYELVIELOKESZITO ,o.C_SPORT ,o.C_ALINTEZMENYID ,o.C_ALTANEVID ,o.TOROLT ,o.SERIAL ,o.LASTCHANGED ,o.CREATED ,o.MODIFIER ,o.CREATOR ,o.ELOZOTANEVIREKORDID ,o.Operation -- Default NA értékek beállítása ,5484 AS C_AGAZAT ,6108 AS C_RESZSZAKKEPESITES ,5527 AS C_SZAKKEPESITES ,6084 AS C_SZAKMACSOPORT ,7920 AS C_AGAZATUJSZKTTIPUSID ,8122 AS C_SZAKMAIRANYTIPUSID ,7946 AS C_SZAKMATIPUSID ,8493 AS C_SZAKIRANYNKTTIPUSID ,8464 AS C_SZAKKEPESITESNKTTIPUSID ,8459 AS C_TANULMANYITERULETNKTTIPUSID FROM #OsztalyTempTable AS o FOR JSON PATH,INCLUDE_NULL_VALUES ) SET @actualJson = @actualJson + ' } }' --NOTE: A törlés azért false, mert a T_OSZTALY_OSSZES view-ból nem törlünk importnál! EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1 --Csoportok beszúrása SET @actualJson = ' { "ImportJson":{ "T_CSOPORT_OSSZES":' + ( SELECT cs.ID ,cs.C_TIPUSA ,cs.C_OSZTALYBONTASID ,cs.C_ALINTEZMENYID ,cs.C_ALTANEVID ,cs.TOROLT ,cs.SERIAL ,cs.LASTCHANGED ,cs.CREATED ,cs.MODIFIER ,cs.CREATOR ,cs.ELOZOTANEVIREKORDID ,cs.Operation FROM #CsoportTempTable AS cs FOR JSON PATH,INCLUDE_NULL_VALUES ) SET @actualJson = @actualJson + ' } }' --NOTE: A törlés azért false, mert a T_CSOPORT_OSSZES view-ból nem törlünk importnál! EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1 --Frissítjük az osztálybontott csoportok adatait az osztály adataival UPDATE ocs SET ocs.C_EVFOLYAMTIPUSA = ocsParent.C_EVFOLYAMTIPUSA ,ocs.C_FELADATELLATASIHELYID = ocsParent.C_FELADATELLATASIHELYID ,ocs.SERIAL = ocs.SERIAL + 1 ,ocs.LASTCHANGED = GETDATE() ,ocs.MODIFIER = @pUserId FROM T_OSZTALYCSOPORT_OSSZES ocs INNER JOIN #CsoportTempTable cs ON ocs.ID = cs.ID AND cs.C_OSZTALYBONTASID IS NOT NULL INNER JOIN T_OSZTALYCSOPORT_OSSZES ocsParent ON cs.C_OSZTALYBONTASID = ocsParent.ID WHERE ocs.C_INTEZMENYID = @pIntezmenyId AND ocs.C_TANEVID = @pTanevId AND ocs.TOROLT = 'F' --Foglalkozások beszúrása SET @actualJson = ' { "ImportJson":{ "T_FOGLALKOZAS_OSSZES":' + ( SELECT fg.ID ,fg.C_TANARID ,fg.C_TANTARGYID ,fg.C_OSZTALYCSOPORTID ,fg.C_FOGLALKOZASTIPUSA ,fg.C_ORASZAM ,fg.C_NEV ,fg.C_ERTEKELESKELL ,fg.C_MULASZTASKELL ,fg.C_TANARFELVEHETI ,fg.C_TULORASZAM ,fg.C_ISOSSZEVONTORA ,fg.C_ISNEMZETISEGI ,fg.C_MEGBIZASIORASZAM ,fg.C_IMPORTALT ,fg.C_INTEZMENYID ,fg.C_TANEVID ,fg.TOROLT ,fg.SERIAL ,fg.LASTCHANGED ,fg.CREATED ,fg.MODIFIER ,fg.CREATOR ,fg.ELOZOTANEVIREKORDID ,fg.Operation FROM #FoglalkozasTempTable AS fg FOR JSON PATH,INCLUDE_NULL_VALUES ) SET @actualJson = @actualJson + ' } }' EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = @pIsTorles, @pIsSubTable = 0 END GO