在存储过程中使用循环
问题描述:
我正在尝试编写一个将行插入临时表的过程。该表格的基础是保险单表,其中列出了保单生命期间赚取的保费金额。原始数据由trans_date(售出日期)和policy_start和policy_end日期组成。即如果保单长达12个月,我们每个月都会收取1/12的保费。在存储过程中使用循环
所以像
while trans_month < policy_end month
insert to tblUEPtmp
select dateadd(mm, 1, trans_date), earned_premium from tblpolicys
set trans_date = dateadd(mm, 1, trans_date)
(我知道这是rubbush代码,但我此刻彻底难倒了)
我的问题是,我需要创建额外的11行数据和修改交易日期每次添加1个月,直到修改的交易日期= policy_end日期。
我已经使用CTE研究,但while循环,也没有更多钞票的CTE内..
这事多语句表函数可以做什么?
非常感谢。
答
您可以杰福做到这一点的CTE,例如这个小片段将演示如何执行使用递归日期:
declare @start DATETIME = '2012-02-01'
declare @end DATETIME = '2013-02-01'
;with cte (date)
AS
(
SELECT @start
UNION ALL
SELECT DATEADD(mm,1,cte.date)
FROM cte WHERE DATEADD(mm,1,cte.date)<@end
)
select * from cte
,将产生日期@start
& @end
与月之间的列表差距。
可以
- 使用真表代替假日期
- 执行
insert into...select ... from cte
插入你需要的数据
如果您可以提供有关表模式更详细,我可以帮助一个更具体的例子。
+0
如果我一次只通过一行,这只会起作用吗?怎么样传递一个查询? – 2012-02-07 13:29:30
答
这样的事情?
set @trans_date = ...
while @trans_date < @policy_end
begin
insert to tblUEPtmp
select trans_date, earned_premium
from tblpolicys
where {whatever}
set @trans_date = dateadd(mm, 1, @trans_date)
end
我们可以解释一下你在做什么。谢谢 – joshua 2012-02-07 11:07:07
试图插入创建的行,按比例划分原始保费到policy_start和policy_end之间的月数,以便我可以总结出多少保费已经在任何一个月。 – 2012-02-07 11:15:18