几个存储过程(“sp1,sp2,sp3,sp4,sp5,sp6”)同时从DAList表中读取不同类型的数据,分别进行各种计算处理。 计算完成后从DAList表删除改条数据。
问题一:
几个存储过程(“sp1,sp2,sp3,sp4,sp5,sp6”)里面都定义了游标“Cur” 从 T_DAList表中查询数据。 那么当这几个存储过程作为作业独立运行的时候,相互之间会不会相互锁定,相互等待???问题二:
游标和临时表各有什么优缺点??? 什么时候应该使用临时表? 什么时候应该使用游标?问题三:
这种情况使用游标是不是更合适???Select @DADayNow = CONVERT(varchar(100), GETDATE(), 112)
--print left(@DADayNow,6) DECLARE Cur CURSOR FOR --控制只取前25000行数据做计算
SELECT TOP 500 DANo,UpdateTime,LogTime,DataType,DAType,DAYear,DAMonth,DADay,DAHour,CollegeNo,CampusNo,BuildingNo,BuildingType,SumQty,EType,EIndex,
ESubitem,ESubitem1,ESubitem2,Unit,Lable,Note FROM T_DAList
WHERE DataType='Public' and DAType='h' and ESubitem!='' ORDER BY (DAYear+DAMonth+DADay+DAHour) OPEN Cur
问题一:
几个存储过程(“sp1,sp2,sp3,sp4,sp5,sp6”)里面都定义了游标“Cur” 从 T_DAList表中查询数据。 那么当这几个存储过程作为作业独立运行的时候,相互之间会不会相互锁定,相互等待???问题二:
游标和临时表各有什么优缺点??? 什么时候应该使用临时表? 什么时候应该使用游标?问题三:
这种情况使用游标是不是更合适???Select @DADayNow = CONVERT(varchar(100), GETDATE(), 112)
--print left(@DADayNow,6) DECLARE Cur CURSOR FOR --控制只取前25000行数据做计算
SELECT TOP 500 DANo,UpdateTime,LogTime,DataType,DAType,DAYear,DAMonth,DADay,DAHour,CollegeNo,CampusNo,BuildingNo,BuildingType,SumQty,EType,EIndex,
ESubitem,ESubitem1,ESubitem2,Unit,Lable,Note FROM T_DAList
WHERE DataType='Public' and DAType='h' and ESubitem!='' ORDER BY (DAYear+DAMonth+DADay+DAHour) OPEN Cur
二:其实你给游标加上 STATIC 选项,就是自动把 SELECT 的结果放在一个临时表中,游标从临时表取数。
三:游标最主要的是一次只操作一条数据,和表没有直接的可比性。关键看需求来决定采用什么方式。
大神,几个存储过程(“sp1,sp2,sp3,sp4,sp5,sp6”)同时从DAList表中读取不同类型的数据,分别进行各种计算处理。 计算完成后从DAList表删除改条数据这种需求用临时表合适,还是用游标合适啊??? 求大神指点啊。
http://www.cnblogs.com/knowledgesea/p/3699851.html
同一个DAList表的同一条记录,如果6个sp都要用到,就不能在这些sp中删除,必须是上层调用过程调用完6个sp后才能删除。既然调用6个sp的时候数据不变,直接取DAList表好了,用得着什么游标、临时表吗?
如果这条记录,6个sp谁抢到了谁计算、删除,那么用UPDATE语句直接设个占用标记就可以了,还是用不着游标、临时表。
6个sp处理的是 T_DAList表里的不同类型的数据,比如。 一个存储过程处理年数据,一个存储过程处理月数据,一个存储过程处理日数据,一个存储过程处理时数据。
需求就是如上所述啊,遍历表里面的数据。 多个存储过程同时运行,数据都来自T_DAList表,但是数据是不同的。 不会出现多个存储过程处理同一条记录的情况。 这个时候用 游标效率高,还是临时表效率高啊。