【发布时间】:2014-12-23 10:13:35
【问题描述】:
我有一个包含四个datetime 列的约会表:
AppointmentStart
AppointmentEnd
Arrival
Departure
现在数据一团糟,有时到达和/或离开是空的,在未来,在过去,整个节目。 AppointmentEnd 甚至被发现在 AppointmentStart 之前。
我编写了一个存储过程来计算开始和结束时间,以及约会的长度。
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吗?如果不是,那是什么问题?
-
对不起,也许我应该解释得更好。该查询是另一个执行 ETL 的 SP 的一部分。我刚刚更新了问题,希望更清楚
标签: sql sql-server tsql datetime stored-procedures