IF OBJECT_ID('[dbo].[sp_DeleteOrarendIdoszak]') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[sp_DeleteOrarendIdoszak] END GO CREATE PROCEDURE [dbo].[sp_DeleteOrarendIdoszak] @start datetime, @end datetime, @intezmenyId int, @tanevId int, @tanarId int, @osztalyCsoportId int, @hetirendId int, @hetNapjaId int, @oraszam int AS BEGIN BEGIN TRY SET NOCOUNT ON SET XACT_ABORT ON DECLARE @startDate DATETIME; SET @startDate = CAST(@start AS DATE) DECLARE @endDate DATETIME; SET @endDate = CAST(@end AS DATE) DECLARE @startDatePlus DATETIME; SET @startDatePlus = DATEADD(day,1,@startDate) DECLARE @endDatePlus DATETIME; SET @endDatePlus = DATEADD(day,1,@endDate) DECLARE @sql nvarchar(MAX); DECLARE @where nvarchar(MAX); -- A Where feltételek extra elemei SET @where = N' AND TOROLT = ''F'' AND C_INTEZMENYID = @intezmenyId AND C_TANEVID = @tanevId'; IF (@tanarId IS NOT NULL) BEGIN SET @where += N' AND C_TANARID = @tanarId'; END IF (@osztalyCsoportId IS NOT NULL) BEGIN SET @where += N' AND C_OSZTALYCSOPORTID = @osztalyCsoportId'; END IF (@hetirendId IS NOT NULL) BEGIN SET @where += N' AND C_HETIREND = @hetirendId'; END IF (@hetNapjaId IS NOT NULL) BEGIN SET @where += N' AND C_HETNAPJA = @hetNapjaId'; END IF (@oraszam IS NOT NULL) BEGIN SET @where += N' AND C_ORASZAM = @oraszam'; END -- Azon elemek törlése, amik teljesen az időszakban vannak (C_ORAERVENYESSEGKEZDETE >; C_ORAERVENYESSEGVEGE <) SET @sql += N' UPDATE T_ORARENDIORA SET TOROLT = ''T'' WHERE C_ORAERVENYESSEGKEZDETE >= ''@startDate'' AND C_ORAERVENYESSEGVEGE <= ''@endDatePlus'''; SET @sql += @where; -- Azon elemek zárásának beállítása, amik az időszakban véget érnek (C_ORAERVENYESSEGKEZDETE <; C_ORAERVENYESSEGVEGE <) SET @sql += N' UPDATE T_ORARENDIORA SET C_ORAERVENYESSEGVEGE = ''@startDatePlus'' WHERE C_ORAERVENYESSEGKEZDETE <= ''@startDate'' AND C_ORAERVENYESSEGVEGE >= ''@startDate'' AND C_ORAERVENYESSEGVEGE <= ''@endDatePlus'''; SET @sql += @where; -- Azon elemek zárásának beállítása, amik az időszakban kezdődnek (C_ORAERVENYESSEGKEZDETE >; C_ORAERVENYESSEGVEGE >) SET @sql += N' UPDATE T_ORARENDIORA SET C_ORAERVENYESSEGKEZDETE = ''@endDate'' WHERE C_ORAERVENYESSEGKEZDETE >= ''@startDate'' AND C_ORAERVENYESSEGKEZDETE <= ''@endDate'' AND C_ORAERVENYESSEGVEGE > ''@endDatePlus'''; SET @sql += @where; -- Azon elemek szétszedése, amik átnyúlnak az időszakon (C_ORAERVENYESSEGKEZDETE <; C_ORAERVENYESSEGVEGE >) SET @sql += N' INSERT INTO T_ORARENDIORA ( C_DIFFERENCIALT, C_DRAMA, C_HETIREND, C_HETNAPJA, C_IKTTANORA, C_IPRTANORA, C_KOOPERATIV, C_MERES, C_MINDENNAPOSTESTENEVELES, C_NEMSZAKRENDSZERUORA, C_NEMZETISEGIORA, C_ORASZAM, C_SORSZAMOZANDO, C_TAMOPORA, C_TULORA, C_BONTOTT, C_ORAERVENYESSEGKEZDETE, C_ORAERVENYESSEGVEGE, C_PARHUZAMOSORA, C_TIOP12, C_ORAKEZDETE, C_ORAVEGE, C_TANORANKIVULIFOGLALKOZAS, C_IMPORTALT, C_CSENGETESIRENDID, C_CSENGETESIRENDORAID, C_TEREMID, C_FOGLALKOZASID, C_TANTARGYID, C_OSZTALYCSOPORTID, C_TANARID, C_ORATULAJDONOSID, C_INTEZMENYID, C_TANEVID, TOROLT, SERIAL, C_ORARENDIORAGROUPID ) SELECT C_DIFFERENCIALT, C_DRAMA, C_HETIREND, C_HETNAPJA, C_IKTTANORA, C_IPRTANORA, C_KOOPERATIV, C_MERES, C_MINDENNAPOSTESTENEVELES, C_NEMSZAKRENDSZERUORA, C_NEMZETISEGIORA, C_ORASZAM, C_SORSZAMOZANDO, C_TAMOPORA, C_TULORA, C_BONTOTT, ''@endDate'', C_ORAERVENYESSEGVEGE, C_PARHUZAMOSORA, C_TIOP12, C_ORAKEZDETE, C_ORAVEGE, C_TANORANKIVULIFOGLALKOZAS, C_IMPORTALT, C_CSENGETESIRENDID, C_CSENGETESIRENDORAID, C_TEREMID, C_FOGLALKOZASID, C_TANTARGYID, C_OSZTALYCSOPORTID, C_TANARID, C_ORATULAJDONOSID, C_INTEZMENYID, C_TANEVID, TOROLT, SERIAL, C_ORARENDIORAGROUPID FROM T_ORARENDIORA WHERE C_ORAERVENYESSEGKEZDETE < ''@startDate'' AND C_ORAERVENYESSEGVEGE > ''@endDate'''; SET @sql += @where; SET @sql += N' UPDATE T_ORARENDIORA SET C_ORAERVENYESSEGVEGE = ''@startDatePlus'' WHERE C_ORAERVENYESSEGKEZDETE < ''@startDate '' AND C_ORAERVENYESSEGVEGE > ''@endDate'''; SET @sql += @where; BEGIN TRANSACTION exec sp_executesql @sql ,N' @startDate datetime, @startDatePlus datetime, @endDate datetime, @endDatePlus datetime, @intezmenyId int, @tanevId int, @tanarId int, @osztalyCsoportId int, @hetirendId int, @hetNapjaId int, @oraszam int ' ,@intezmenyId = @intezmenyId ,@tanevId = @tanevId ,@tanarId = @tanarId ,@osztalyCsoportId = @osztalyCsoportId ,@hetirendId = @hetirendId ,@hetNapjaId = @hetNapjaId ,@oraszam = @oraszam ,@startDate = @startDate ,@startDatePlus = @startDatePlus ,@endDate = @endDate ,@endDatePlus = @endDatePlus; COMMIT TRANSACTION END TRY BEGIN CATCH IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0 ROLLBACK TRAN; THROW END CATCH END GO