首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求解读一段存储过程,望能详细描述语句的作用!该如何解决

2012-01-19 
求解读一段存储过程,望能详细描述语句的作用!CREATEPROCEDUREspARPU@countsint,@makeintASdeclare@TimeIDv

求解读一段存储过程,望能详细描述语句的作用!
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

热点排行