我有一个包含四个datetime
列的预约表中返回多个值未来,在过去,所有的表演。 AppointmentEnd
甚至被发现在AppointmentStart
之前。如何从存储过程的T-SQL查询
我写了一个存储过程来计算开始和结束时间以及约会的长度。
ALTER PROCEDURE Calcdates @ApptStart DATETIME,
@ApptEnd DATETIME,
@PatArrive DATETIME,
@PatDepart DATETIME
AS
DECLARE @CalcStart DATETIME
DECLARE @CalcEnd DATETIME
DECLARE @CalcLen INT
-- CALCULATED STARTDATETIME
SET @CalcStart = CASE
WHEN @PatArrive IS NULL THEN @ApptStart
WHEN @PatArrive IS NOT NULL THEN
CASE
WHEN @PatArrive BETWEEN Dateadd(MINUTE, -60, @ApptStart) AND Dateadd(MINUTE, 480, @ApptStart) THEN @PatArrive
ELSE @ApptStart
END
END
-- CALCUALTED ENDDATETIME
SET @CalcEnd = CASE
WHEN @PatDepart IS NULL THEN
CASE
WHEN @ApptEnd BETWEEN @ApptStart AND Dateadd(MINUTE, 480, @ApptStart) THEN @ApptEnd
ELSE Dateadd(MINUTE, 30, @ApptStart)
END
WHEN @PatDepart IS NOT NULL THEN
CASE
WHEN @PatDepart BETWEEN @ApptStart AND Dateadd(MINUTE, 480, @ApptStart) THEN @PatDepart
ELSE
CASE
WHEN @ApptEnd BETWEEN @ApptStart AND Dateadd(MINUTE, 480, @ApptStart) THEN @ApptEnd
ELSE Dateadd(MINUTE, 30, @ApptStart)
END
END
END
-- CALCULATED LENGTH
SET @CalcLen = Datediff(MINUTE, @CalcStart, @CalcEnd)
我现在需要做的是弄清楚如何在我的查询中有这个返回值。
即这是我目前有
SELECT PrimKey,
Name,
AppointmentStart,
AppointmentEnd,
PatArrive,
PatDepart,
Somehow have the results of the SP here
FROM MyTable
我想要做的就是调用查询中的SP,并给我的计算值对于每个记录。
有人知道如何做到这一点吗?或者我是否以错误的方式去做?
如果将SQL语句放入存储过程中,会发生什么情况?当然它会根据需要返回recorset吗?如果不是,那么问题是什么? – 2014-10-28 04:43:38
对不起,也许我应该解释得更好。查询是另一个SP和ETL的一部分。我刚更新了这个问题,希望这个更清晰 – Matt 2014-10-28 04:51:33