循环遍历SQL Server存储过程中的记录?

时间:2011-05-04 20:20:48

标签: tsql loops

我有以下问题。我有两个表(在另一个开发人员的另一台服务器上创建): 巴士线路: LineID int, 出发时间日期时间, ...

BUSStops: LineID int, StopID int, 小时int, 分钟int, ...

所以,我需要以格式获取数据: LineID int, StopID int, StopDeparture日期时间, ...

必须为每个StopID计算StopDeparture,方法是将Hour和Minute添加到该行的前一个StopDeparture。

我的想法是选择临时表中的所有数据并循环遍历数据以重新计算出发时间。任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

只要预计每行停止次数不多,就可以使用三角形连接。

WITH BUSLines(LineID, DepartureTime) AS
(
SELECT 1, CAST('1900-01-01T10:00:00' AS DATETIME) UNION ALL
SELECT 2, CAST('1900-01-01T12:30:00' AS DATETIME) 
),
BUSStops(LineID,StopID,Hour,Minute) AS
(
SELECT 1,1,0,40 UNION ALL
SELECT 1,2,0,10 UNION ALL
SELECT 2,1,0,30 UNION ALL
SELECT 2,2,0,27 UNION ALL
SELECT 2,3,1,15 
)
SELECT BL.LineID, 
       BS1.StopID, 
       DATEADD(MINUTE,SUM(BS2.Minute),DATEADD(HOUR,SUM(BS2.Hour),BL.DepartureTime))
FROM BUSLines BL
JOIN BUSStops BS1 ON BL.LineID = BS1.LineID
JOIN BUSStops BS2 ON BL.LineID = BS2.LineID AND BS2.StopID <= BS1.StopID
GROUP BY BL.LineID, BL.DepartureTime, BS1.StopID

答案 1 :(得分:0)

你可以使用游标。以下是快速示例example。但要注意游标很慢,我不建议在很多情况下使用它们。