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 = null, @osztalyCsoportId int = null, @hetirendId int = null, @hetNapjaId int = null, @oraszam int = null, @felhelyId int = null AS BEGIN BEGIN TRY SET NOCOUNT ON SET XACT_ABORT ON DECLARE @startDate nvarchar(200); SET @startDate = CONVERT(nvarchar(200), @start, 112) DECLARE @endDate nvarchar(200); SET @endDate = CONVERT(nvarchar(200), @end, 112) DECLARE @startDatePlus nvarchar(200); SET @startDatePlus = CONVERT(nvarchar(200), DATEADD(day,1,@start), 112) DECLARE @endDatePlus nvarchar(200); SET @endDatePlus = CONVERT(nvarchar(200), DATEADD(day,1,@end), 112) 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 IF (@felhelyId IS NOT NULL) BEGIN SET @where += N' AND C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALYCSOPORT WHERE C_FELADATELLATASIHELYID = @felhelyId)'; 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 + N''' AND C_ORAERVENYESSEGVEGE <= ''' + @endDatePlus + N''' '; 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 = ''' + @startDate + N''' WHERE C_ORAERVENYESSEGKEZDETE <= ''' + @startDate + N''' AND C_ORAERVENYESSEGVEGE >= ''' + @startDate + N''' AND C_ORAERVENYESSEGVEGE <= ''' + @endDatePlus + N''' '; 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 + N''' WHERE C_ORAERVENYESSEGKEZDETE >= ''' + @startDate + N''' AND C_ORAERVENYESSEGKEZDETE <= ''' + @endDate + N''' AND C_ORAERVENYESSEGVEGE > ''' + @endDatePlus + N''''; 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_MINDENNAPOSTESTNEVELES, 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_MINDENNAPOSTESTNEVELES, C_NEMSZAKRENDSZERUORA, C_NEMZETISEGIORA, C_ORASZAM, C_SORSZAMOZANDO, C_TAMOPORA, C_TULORA, C_BONTOTT, ''' + @endDatePlus + N''', 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 + N''' AND C_ORAERVENYESSEGVEGE > ''' + @endDate + N''''; SET @sql += @where; SET @sql += N' UPDATE T_ORARENDIORA SET C_ORAERVENYESSEGVEGE = ''' + @startDate + N''' WHERE C_ORAERVENYESSEGKEZDETE < ''' + @startDate + N''' AND C_ORAERVENYESSEGVEGE > ''' + @endDate + N''''; SET @sql += @where; BEGIN TRANSACTION exec sp_executesql @sql ,N' @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 COMMIT TRANSACTION END TRY BEGIN CATCH IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0 ROLLBACK TRAN; THROW END CATCH END GO