CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

帮忙解决语法错误

楼主jueranliqv(MilanNello)2006-06-01 10:47:44 在 MS-SQL Server / 应用实例 提问

CREATE   PROCEDURE   rw_period_ini   @year   int,@errmsg   varchar(500)   output     AS  
  Declare   @iperiod   int,@Fyear   int,   @a   int,@i   int  
  Begin  
  If   exists(select   period   from   period   where   period=@iperiod)  
  Set   @errmsg='该期间已经存在,不能重复添加'  
  Else  
  Begin  
  begin  
  If   exists(select   period   from   period   where   period='0')             /*期间表为空*/  
  Select   svalue   from   sysconfig   where   @Fyear   =svalue       /*取系统设置表中的系统启用日期作为当前日期*/  
   
  Else  
  Select   @Fyear=max(@iperiod)   from   period  
  end  
      Begin  
                      Begin            
                        begin                                                  
                              case   @a<=12  
                                select   @i=1                
   
                                when   @a=1   then                                
                                    while(i<=31)  
                                              set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                               
                                            when   @a=2   then  
                                        begin  
                                          If     ((@year%4=0   )   and   (@year%100<>0)   or   (@year%400=0))    
                                          if     ((@Fyear%4=0   )   and   (@Fyear%100<>0)   or   (@Fyear%400=0)  
                                                  begin  
                                                  while(i<=29)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                  end  
                                          else  
                                                while(i<=30)     set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                            end  
                             
                                      when   @a=3   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=4   then  
                                                    while(i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=5   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=6   then  
                                                    while(i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=7   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                      end  
                                     
                                              when   @a=8   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                   
                                          when   @a=9   then  
                                                      while(i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                     
                                          when   @a=10   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                             
                                        when   @a=11   then  
                                                      while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                         
                                           
                                              when   @a=12   then                                                                                          
                                                    while(i<=31)   set         @i=@i+1;  
                                                      Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')                                                                                                    
                      End    
                    Begin   Tran  
                    insert   into   account   (period)   values   (@iperiod   )    
                    insert   into   member_account   (period)values(@iperiod)    
                    insert   into   account   (period)   values(@iperiod)      
                    insert   into   bonus_account(period)   values(@iperiod)  
                    insert   into   dealer_account(period)   values(@iperiod)  
                    if   @@rowcount=0  
                            Begin  
                                    Rollback   Tran  
                                    Return   (-1)  
                                    set   @errmsg='提交事务失败,回滚事务'  
                                End  
                      Else  
                                Begin  
                                Commit   Tran  
                                Return   (0)  
                                  End  
                    End  
  End  
   
  GO 问题点数:20、回复次数:7Top

1 楼coolingpipe(冷箫轻笛)回复于 2006-06-01 10:52:56 得分 0

case   使用有问题Top

2 楼itblog(Just for wife!)回复于 2006-06-01 10:55:01 得分 0

CREATE   PROCEDURE   rw_period_ini   @year   int,@errmsg   varchar(500)   output     AS  
  Declare   @iperiod   int,@Fyear   int,   @a   int,@i   int  
  Begin  
  If   exists(select   period   from   period   where   period=@iperiod)  
  Set   @errmsg='该期间已经存在,不能重复添加'  
  Else  
  Begin  
  begin  
  If   exists(select   period   from   period   where   period='0')             /*期间表为空*/  
  Select   svalue   from   sysconfig   where   @Fyear   =svalue       /*取系统设置表中的系统启用日期作为当前日期*/  
   
  Else  
  Select   @Fyear=max(@iperiod)   from   period  
  end  
      Begin  
                      Begin            
                        begin                                                  
                              case   @a<=12  
                                select   @i=1                
   
                                when   @a=1   then                                
                                    while(i<=31)  
                                              set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                               
                                            when   @a=2   then  
                                        begin  
                                          If     ((@year%4=0   )   and   (@year%100<>0)   or   (@year%400=0))    
                                          if     ((@Fyear%4=0   )   and   (@Fyear%100<>0)   or   (@Fyear%400=0)  
                                                  begin  
                                                  while(i<=29)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                  end  
                                          else  
                                                while(i<=30)     set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                            end  
                             
                                      when   @a=3   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=4   then  
                                                    while(i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=5   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=6   then  
                                                    while(i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=7   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                      end  
                                     
                                              when   @a=8   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                   
                                          when   @a=9   then  
                                                      while(i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                     
                                          when   @a=10   then  
                                                    while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                             
                                        when   @a=11   then  
                                                      while(i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                         
                                           
                                              when   @a=12   then                                                                                          
                                                    while(i<=31)   set         @i=@i+1;  
                                                      Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')                                                                                                    
                      End    
                    Begin   Tran  
                    insert   into   account   (period)   values   (@iperiod   )    
                    insert   into   member_account   (period)values(@iperiod)    
                    insert   into   account   (period)   values(@iperiod)      
                    insert   into   bonus_account(period)   values(@iperiod)  
                    insert   into   dealer_account(period)   values(@iperiod)  
                    if   @@rowcount=0  
                            Begin  
                                    Rollback   Tran  
                                    Return   (-1)  
                                    set   @errmsg='提交事务失败,回滚事务'  
                                End  
                      Else  
                                Begin  
                                Commit   Tran  
                                Return   (0)  
                                  End  
                    End  
  End  
   
  GO  
  Top

3 楼itblog(Just for wife!)回复于 2006-06-01 10:55:24 得分 0

CREATE   PROCEDURE   rw_period_ini   @year   int,@errmsg   varchar(500)   output     AS  
  Declare   @iperiod   int,@Fyear   int,   @a   int,@i   int  
  Begin  
  If   exists(select   period   from   period   where   period=@iperiod)  
  -----------------------------------------------@iperiod初值为0,这句应该有错~  
  Set   @errmsg='该期间已经存在,不能重复添加'  
  Else  
  Begin  
  begin  
  If   exists(select   period   from   period   where   period='0')             /*期间表为空*/  
  Select   svalue   from   sysconfig   where   @Fyear   =svalue       /*取系统设置表中的系统启用日期作为当前日期*/  
  -------------------------------------------svalue从哪里来的?  
  Else  
  Select   @Fyear=max(@iperiod)   from   period  
  end  
      Begin  
                      Begin            
                        begin        
  -------------------@a没有赋值,初值为0,以下判断都没用~                                            
                              case   @a<=12  
                                select   @i=1                
   
                                when   @a=1   then                                
                                    while(i<=31)-----i变量写法不对  
                                              set         @i=@i+1;Top

4 楼jueranliqv(MilanNello)回复于 2006-06-01 11:01:27 得分 0

begin          
                            select   @a=0                                          
                              case   @a<=12  
                                select   @i=1                
   
                                when   @a=1   then                                
                                    while(@i<=31)  
                                              set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                               
                                            when   @a=2   then  
                                        begin  
                                          If     ((@year%4=0   )   and   (@year%100<>0)   or   (@year%400=0))    
                                          if     ((@Fyear%4=0   )   and   (@Fyear%100<>0)   or   (@Fyear%400=0)  
                                                  begin  
                                                  while(@i<=29)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                  end  
                                          else  
                                                while(@i<=30)     set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                            end  
                             
                                      when   @a=3   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=4   then  
                                                    while(@i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=5   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=6   then  
                                                    while(@i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=7   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                      end  
                                     
                                              when   @a=8   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                   
                                          when   @a=9   then  
                                                      while(@i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                     
                                          when   @a=10   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                             
                                        when   @a=11   then  
                                                      while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                         
                                           
                                              when   @a=12   then                                                                                          
                                                    while(@i<=31)   set         @i=@i+1;  
                                                      Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')                                                                                                    
                      End    
  这个改了怎么还有错误??  
  Top

5 楼jueranliqv(MilanNello)回复于 2006-06-01 11:09:53 得分 0

CREATE   PROCEDURE   rw_period_ini   @year   int,@errmsg   varchar(500)   output     AS  
  Declare   @iperiod   int,@Fyear   int,   @a   int,@i   int  
  Begin  
  If   exists(select   period   from   period   where   period=@iperiod)  
  Set   @errmsg='该期间已经存在,不能重复添加'  
  Else  
  Begin  
  begin  
  If   exists(select   period   from   period   where   period='0')             /*期间表为空*/  
  Select   svalue   from   sysconfig   where   @Fyear   =svalue       /*取系统设置表中的系统启用日期作为当前日期*/  
   
  Else  
  Select   @Fyear=max(@iperiod)   from   period  
  end  
      Begin  
                      Begin            
                        begin          
                            select   @a=0                                          
                          select     case   @a<=12  
                                select   @i=1                
   
                                when   @a=1   then                                
                                    while(@i<=31)  
                                              set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                               
                                            when   @a=2   then  
                                        begin  
                                          If     ((@year%4=0   )   and   (@year%100<>0)   or   (@year%400=0))    
                                          if     ((@Fyear%4=0   )   and   (@Fyear%100<>0)   or   (@Fyear%400=0)  
                                                  begin  
                                                  while(@i<=29)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                  end  
                                          else  
                                                while(@i<=30)     set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                            end  
                             
                                      when   @a=3   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=4   then  
                                                    while(@i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                                        when   @a=5   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=6   then  
                                                    while(@i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                       
                                        when   @a=7   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                      end  
                                     
                                              when   @a=8   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                   
                                          when   @a=9   then  
                                                      while(@i<=30)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                                                     
                                          when   @a=10   then  
                                                    while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                     
                             
                                        when   @a=11   then  
                                                      while(@i<=31)   set         @i=@i+1;  
                                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                         
                                           
                                              when   @a=12   then                                                                                          
                                                    while(@i<=31)   set         @i=@i+1;  
                                                      Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')                                                                                                    
                      End    
                    Begin   Tran  
                    insert   into   account   (period)   values   (@iperiod   )    
                    insert   into   member_account   (period)values(@iperiod)    
                    insert   into   account   (period)   values(@iperiod)      
                    insert   into   bonus_account(period)   values(@iperiod)  
                    insert   into   dealer_account(period)   values(@iperiod)  
                    if   @@rowcount=0  
                            Begin  
                                    Rollback   Tran  
                                    Return   (-1)  
                                    set   @errmsg='提交事务失败,回滚事务'  
                                End  
                      Else  
                                Begin  
                                Commit   Tran  
                                Return   (0)  
                                  End  
                    End  
  End  
   
  GOTop

6 楼paoluo(一天到晚游泳的鱼)回复于 2006-06-01 11:36:36 得分 0

應該還有問題吧。Top

7 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-06-01 12:52:45 得分 0

CREATE   PROCEDURE   rw_period_ini   @year   int,@errmsg   varchar(500)   output     AS  
  Declare   @iperiod   int,@Fyear   int,   @a   int,@i   int  
  Begin  
  If   exists(select   period   from   period   where   period=@iperiod)  
  Set   @errmsg='该期间已经存在,不能重复添加'  
  Else  
  Begin  
  begin  
  If   exists(select   period   from   period   where   period='0')             /*期间表为空*/  
  Select   svalue   from   sysconfig   where   @Fyear   =svalue       /*取系统设置表中的系统启用日期作为当前日期*/  
   
  Else  
  Select   @Fyear=max(@iperiod)   from   period  
  end  
      Begin  
                      Begin        
                              begin      
                                select   @a=1      
                                while(@a<=12)  
                                set   @a=@i+1                              
                                select   @i=1    
                                  if   @a   in(1,3,5,7,8,10,12)  
                                    begin  
                                    print   1  
                                    while(@i<=31)     set     @i=@i+1;  
                                      Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')  
                                    end  
                                else  
                                    if   @a   in(4,6,9,11)  
                                      begin  
                                        while(@i<=30)   set     @i=@i+1;  
                                        Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')  
                                    end  
                            else  
                                  if     @a   in(2)  
                                      begin  
                                          If     ((@year%4=0   )   and   (@year%100<>0)   or   (@year%400=0))    
                                          if     ((@Fyear%4=0   )   and   (@Fyear%100<>0)   or   (@Fyear%400=0))  
                                                  begin  
                                                      while(@i<=29)  
  begin  
    set     @i=@i+1;  
                                                      Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
  end  
                                                  end  
                                          else  
                                                      while(@i<=30)     set     @i=@i+1;  
                                                      Insert   into   period   (period,begintime,endtime,bend)   values   (@iperiod,@Fyear,@year,'0')    
                                end  
                          end                      
                      End    
                    Begin   Tran  
                    insert   into   account   (period)   values   (@iperiod   )    
                    insert   into   member_account   (period)values(@iperiod)    
                    insert   into   account   (period)   values(@iperiod)      
                    insert   into   bonus_account(period)   values(@iperiod)  
                    insert   into   dealer_account(period)   values(@iperiod)  
                    if   @@rowcount=0  
                            Begin  
                                    Rollback   Tran  
                                    Return   (-1)  
                                    set   @errmsg='提交事务失败,回滚事务'  
                                End  
                      Else  
                                Begin  
                                Commit   Tran  
                                Return   (0)  
                                  End  
                    End  
  End  
  end  
  GO  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:jueranliqv

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo