日期:2014-05-17  浏览次数:20456 次

怎样在SQLServer2005的存储过程中如何遍历记录集?
现有一个数据库,字段分别是F1到F3,并按一定规律排好序,F1是唯一值,可以认为是ID,现在要编写一个存储过程,并定时执行,功能是找到这张表中字段F2或F3的值比相邻两条记录对应字段的平均值小一半的记录,并把对应字段的值改成相邻字段的平均值,应该如何实现?请大家帮忙。

如果我没描述清楚,请跟帖说明,很着急,谢谢。

------解决方案--------------------
select * from tb a
cross apply (select top 1 * from tb where F1>a.F1) b
cross apply (select top 1 * from tb where F1<a.F1) c

b,c即相邻数据加条件过滤
where a.F2<(b.F2+c.F2)/2

写一个定时作业,执行你的存储过程。
------解决方案--------------------
;WITH MU AS (
SELECT F1,F2,F3,ROW_NUMBER() OVER(ORDER BY F1 ASC) AS NUM 
FROM TB
)
UPDATE T2 SET 
T2.F2=CASE WHEN T2.F2=(T1.F2+T3.F2)/4 THEN (T1.F2+T3.F2)/2 ELSE T2.F2 END
,T2.F3=CASE WHEN T2.F3=(T1.F3+T3.F3)/4 THEN (T1.F3+T3.F3)/2 ELSE T2.F3 END
FROM MU T1
INNER JOIN MU T2 ON T1.NUM=T2.NUM-1
INNER JOIN MU T3 ON T2.NUM=T3.NUM-1
WHERE (T2.F2=(T1.F2+T3.F2)/4 OR T2.F3=(T1.F3+T3.F3)/4)