Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 是否遍历SQL Server存储过程中的记录?_Tsql_Loops - Fatal编程技术网

Tsql 是否遍历SQL Server存储过程中的记录?

Tsql 是否遍历SQL Server存储过程中的记录?,tsql,loops,Tsql,Loops,我有以下问题。我在另一个开发人员的另一台服务器上创建了两个表: 母线: LineID int, 出发时间日期时间, 巴士站: LineID int, StopID int, 整小时, 分钟整数, 因此,我需要以以下格式获取数据: LineID int, StopID int, 停止起飞日期时间, 必须以将小时和分钟添加到该线路的前一个StopExamide的方式计算每个StopID的StopExamide 我的想法是选择一个临时表中的所有数据,并在数据中循环以重新计算出发时间。有什么办法解

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

巴士站: LineID int, StopID int, 整小时, 分钟整数,

因此,我需要以以下格式获取数据: LineID int, StopID int, 停止起飞日期时间,

必须以将小时和分钟添加到该线路的前一个StopExamide的方式计算每个StopID的StopExamide


我的想法是选择一个临时表中的所有数据,并在数据中循环以重新计算出发时间。有什么办法解决这个问题吗?

你可以用光标来解决这个问题。下面是一个简单的例子。但是请注意,游标速度很慢,我不建议在很多情况下使用它们。

只要每行的停止次数不太理想,您就可以使用三角形连接

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

哪个版本的SQL Server?如果>=2005,则递归CTE在不使用临时表和循环的情况下是有用的。启动速度更快。很抱歉,我没有访问SQL Server的权限来编写代码。顺便说一句,如果能为写答案的人包括创建表格和一些测试数据插入,那就太好了。平均每行有多少站?