Tengo un procedimiento almacenado que inserta dos registros en una tabla, la diferencia entre los registros es que la columna de tiempo del segundo registro es @MinToAddposterior a la primera:
CREATE PROCEDURE CreateEntry
    /*Other columns*/
    @StartTime time(2),
    @EndTime time(2),
    @MinutesToAdd smallint
    AS
BEGIN
    SET NOCOUNT ON;
    SET @MinutesToAdd = @MinutesToAdd % 1440;   --Prevent overflow if needed?
    IF (@MinutesToAdd > 0)
    BEGIN
    INSERT INTO ClientNotification (/*Other columns*/ startTime, endTime)
        OUTPUT inserted.id
        VALUES
               (/*Other columns*/ @StartTime, @EndTime),
               (/*Other columns*/ @StartTime + @MinutesToAdd, @EndTime + @MinutesToAdd);
    END
    ELSE
    BEGIN
        /*Whatever ELSE does.*/
    END
END
¿Cuál es la forma correcta de agregar @MinutesToAddminutos a @StartTimey @EndTime? 
Tenga en cuenta que estoy usando el timetipo de datos.
Actualización : 
una respuesta correcta debe contener la siguiente información:
- Cómo agregar minutos a un 
timetipo de datos. - Que la solución propuesta no resulta en una pérdida de precisión.
 - Problemas o inquietudes a tener en cuenta en el caso de que los minutos sean demasiado largos para caber en una 
timevariable, o riesgo de volcar latimevariable. Si no hay problemas, indíquelo. 
                    
                        sql-server
                                sql-server-2008
                                
                    
                    
                        Trisped
fuente
                
                fuente

Respuestas:
No puede usar aritmética abreviada perezosa con los nuevos tipos. Tratar:
Tenga en cuenta que aunque haya protegido su
@MinutesToAddcontra desbordamiento, no ha protegido el resultado del desbordamiento. Esto no produce un error, sin embargo, es posible que no sea el resultado que espera.Resultado:
Supongo que esto debe pasar por algún tipo de conversión interna, porque no podría obtener ese resultado diciendo:
Resultado:
Debe considerar cómo desea manejar los cálculos que conducen a uno
@EndTimeo ambos@StartTimey@EndTimeestar en el día siguiente.Además, para abordar otro nuevo requisito en su "respuesta ideal", no hay pérdida de precisión. Según la documentación , el tipo de retorno de
DATEADDes el mismo que la entrada:Por lo tanto,
TIMEadentro,TIMEafuera.fuente
DATEADDdevuelve el mismo tipo que el argumento de fecha, entonces aceptaré. El "Prevenir el desbordamiento si es necesario?" No se necesita línea. El problema de transferencia será manejado por la fuente de los datos y el destino de los datos.Simplemente use la función dateadd para agregar sus minutos en entero contra '0:00'. Luego regresa al tiempo.
Seleccionar reparto (dateadd (minuto, 84, '0: 00') como hora)
Aquí, 84 es el minuto entero que quiero expresar en el tipo "tiempo".
Agregué eso a '0:00' y luego para eliminar el componente de fecha, lo convierto al tipo de hora. No se necesita codificación personalizada.
(Sin nombre de columna)
01: 24: 00.0000000
fuente