求解读一段存储过程,望能详细描述语句的作用!
CREATE PROCEDURE spARPU
@counts int ,
@make int
AS
declare @TimeID varchar(8)
declare @UserID varchar(20)
declare @CustomSubTypeID varchar(20)
declare @SubTypeID varchar(40)
declare @ARPURevenue decimal(10,2)
declare @AddARPURevenue decimal(10,2)
declare @k int
set @k=1
declare ts CURSOR scroll dynamic FOR
select TimeID from tTime
declare sname1 CURSOR scroll dynamic FOR
select SiteID from TArea
declare uname1 CURSOR scroll dynamic FOR
select UserID from tUsers
declare csname CURSOR scroll dynamic FOR
select CustomSubTypeID from tCustomType
declare cs1 CURSOR scroll dynamic FOR
select Counts from tCallCounts
declare sertypename1 cursor scroll dynamic for
select SubTypeID from tServSubType
declare hs1 CURSOR scroll dynamic FOR
select Hours from tPeriodHour
declare servname cursor scroll dynamic for
select CallTypeID from tCallType
declare billname cursor scroll dynamic for
select BillingCycleTypeID from tBillingCycleType
declare workname cursor scroll dynamic for
select WorkingTypeName from tWorkingType
open uname1
open csname
open cs1
open sertypename1
open ts
open hs1
open servname
open workname
while @k <=@counts
begin
FETCH NEXT FROM ts into @TimeID
if @@FETCH_STATUS <> 0
fetch first from ts
FETCH NEXT FROM uname1 into @UserID
if @@FETCH_STATUS <> 0
fetch first from uname1
fetch next from sertypename1 into @SubTypeID
if (@@FETCH_STATUS <> 0 )
fetch first from sertypename1
fetch next from csname into @CustomSubTypeID
if (@@FETCH_STATUS <> 0 )
fetch first from csname
set @ARPURevenue=ROUND(rand() * 3000 + 126,2)
set @AddARPURevenue=ROUND(rand()*600 + 1,2)
insert into pARPU(TimeID,UserID,CustomSubTypeID,SubTypeID,MarketChannelID,ARPURevenue,AddARPURevenue)
values(@TimeID,@UserID,@CustomSubTypeID,@SubTypeID,@make,@ARPURevenue,@AddARPURevenue)
set @k = @k + 1
end
DEALLOCATE sname1
close uname1
DEALLOCATE uname1
close csname
DEALLOCATE csname
close cs1
DEALLOCATE cs1
close sertypename1
DEALLOCATE sertypename1
close ts
deallocate ts
close hs1
deallocate hs1
close servname
deallocate servname
deallocate billname
close workname
deallocate workname
GO
[解决办法]
CREATE PROCEDURE spARPU -创建存储过程
@counts int , -定义输出变量
@make int
AS --连接SQL语句的关键子前面也可以加个output
declare @TimeID varchar(8) --定义变量
declare @UserID varchar(20) --定义变量
declare @CustomSubTypeID varchar(20) --定义变量
declare @SubTypeID varchar(40) --定义变量
declare @ARPURevenue decimal(10,2) --定义变量
declare @AddARPURevenue decimal(10,2) --定义变量
declare @k int --定义变量
set @k=1 -关键字
declare ts CURSOR scroll dynamic FOR -定义游标1
select TimeID from tTime -查询语句
declare sname1 CURSOR scroll dynamic FOR
select SiteID from TArea
declare uname1 CURSOR scroll dynamic FOR
select UserID from tUsers
declare csname CURSOR scroll dynamic FOR
select CustomSubTypeID from tCustomType
declare cs1 CURSOR scroll dynamic FOR
select Counts from tCallCounts
declare sertypename1 cursor scroll dynamic for
select SubTypeID from tServSubType
declare hs1 CURSOR scroll dynamic FOR
select Hours from tPeriodHour
declare servname cursor scroll dynamic for
select CallTypeID from tCallType
declare billname cursor scroll dynamic for
select BillingCycleTypeID from tBillingCycleType
declare workname cursor scroll dynamic for
select WorkingTypeName from tWorkingType
open uname1 -打开游标
open csname
open cs1
open sertypename1
open ts
open hs1
open servname
open workname
while @k <=@counts -开始条件
begin --游标使用关键字
FETCH NEXT FROM ts into @TimeID -游标与变量联级起来
if @@FETCH_STATUS <> 0 -当游标状态不为0时,开始
fetch first from ts
FETCH NEXT FROM uname1 into @UserID
if @@FETCH_STATUS <> 0
fetch first from uname1
fetch next from sertypename1 into @SubTypeID
if (@@FETCH_STATUS <> 0 )
fetch first from sertypename1
fetch next from csname into @CustomSubTypeID
if (@@FETCH_STATUS <> 0 )
fetch first from csname
set @ARPURevenue=ROUND(rand() * 3000 + 126,2) -变量设为随机
set @AddARPURevenue=ROUND(rand()*600 + 1,2)
insert into pARPU -将值插入表中(TimeID,UserID,CustomSubTypeID,SubTypeID,MarketChannelID,ARPURevenue,AddARPURevenue)-字段名
values(@TimeID,@UserID,@CustomSubTypeID,@SubTypeID,@make,@ARPURevenue,@AddARPURevenue) --对应的变量
set @k = @k + 1 -以步长为1递增
end
DEALLOCATE sname1 -释放游标
close uname1 -关闭游标
DEALLOCATE uname1
close csname
DEALLOCATE csname
close cs1
DEALLOCATE cs1
close sertypename1
DEALLOCATE sertypename1
close ts
deallocate ts
close hs1
deallocate hs1
close servname
deallocate servname
deallocate billname
close workname
deallocate workname
GO