I have this stored procedure in T-SQL for splitting a DATETIME into shifts.
I would divide the DATETIME START and DATETIME END into shifts (for example, one shift for hours or one shift every 15 minutes). I should this shift into a temporary table for use it in another query.
So for this I have create this cycle:
BEGIN
      SET @DATASTART = '2014-11-28 06:00:00'
      SET @DATAEND = '2014-11-28 21:00:00'
    --DICHIARO DUE VARIABILI DATA CHE UTILIZZO
    --PER MANTENERE I DUE SHIFT
    DECLARE @DataFirstShift as DATETIME
    DECLARE @DataLastShift as DATETIME
    --DICHIARO UN CONTATORE PER POPOLARE IL CAMPO ID
    DECLARE @Contatore as INT
    SET @Contatore = 0
    --SETTO LA DATA FIRSTSHIFT A DATASTART
    SET @DataFirstShift = @DATA_START
    WHILE(@DataFirstShift <= @DATA_END)
        BEGIN
            --POPOLO LA DATA LAST CON UN ORA IN PIU RISPETTO ALLA PRIMA DATA
            IF @Shift LIKE 'All'
                BEGIN 
                    SET @DataLastShift = DATEADD(HOUR,1,@DataFirstShift)
                END
            ELSE 
                BEGIN 
                    SET @DataLastShift = DATEADD(MINUTE,15,@DataFirstShift)
                END
            INSERT INTO @TemporaryTable2 (ID,DATASTART,DATAEND)
            VALUES (@Contatore,@DataFirstShift,@DataLastShift)
            SET @DataFirstShift=@DataLastShift
            --INCREMENTO IL CONTATORE
            SET @Contatore+=1
        END
END
This method works but I this cycle is slow. I want to know if exist a method faster than it.
Can someone help me? Regards