CREATE   PROCEDURE   prGetNo   --产生按年月日排列的档案号   
          @No   varchar(12)   output   ---为产生的档案号   
  AS     
  declare   @Year   Int,   
                  @Month   int,   
                  @Day   int,   
                  @Temp_No   varchar(12),   
                  @NeedNo   varchar(4)   --档案号   
  BEGIN   
      select   @year=Year(GetDate())   
      select   @Month=Month(GetDate())   
      select   @Day=Day(GetDate())   
      select   @No=Str(@Year,4,0)+   
                                  (select   
                                    case   
                                      when   @Month>=10   then   Str(@Month,2,0)   
                                      when   @Month<10   Then   '0'+Str(@Month,1,0)   
                                  end)+   
                                  (select   
                                    case   
                                      when   @Day>=10   then   Str(@Day,2,0)   
                                      when   @Day<10   Then   '0'+Str(@Day,1,0)   
                                    end)   
      SELECT   @Temp_No   =   档案编号   FROM   档案编号表   
            IF   @No   <>   SUBSTRING(   @Temp_No,1,8)   
            SELECT   @No   =   @No+'0001'   
      ELSE   
        BEGIN   
            SELECT   @RandNo   =   STR(CONVERT(int,(SUBSTRING(   @Temp_No   ,9,4))+1),4,0)   
            SELECT   @RandNo   =   REPLACE(   @RandNo,'   ','0')   
            SELECT   @No   =   @No   +   @RandNo   
        END   
      UPDATE   档案编号表   
                    SET   档案编号   =   @No   
  END   
  END   在sql server 里创建时提示“必须声明变量 '@RandNo' ”和
“服务器: 消息 156,级别 15,状态 1,过程 prGetNo,行 36
在关键字 'END' 附近有语法错误。 ” 两个错误,请哪里需要更正

解决方案 »

  1.   

    @NeedNo 能和@RandNo一样么?
    检查一下。
      

  2.   

    CREATE   PROCEDURE   prGetNo   --产生按年月日排列的档案号   
              @No   varchar(12)   output   ---为产生的档案号   
      AS     
      declare   @Year   Int,   
                      @Month   int,   
                      @Day   int,   
                      @Temp_No   varchar(12),   
                      @NeedNo   varchar(4),   --档案号 
                      @randno varchar(10)  
      BEGIN   
          select   @year=Year(GetDate())   
          select   @Month=Month(GetDate())   
          select   @Day=Day(GetDate())   
          select   @No=Str(@Year,4,0)+   
                                      (select   
                                        case   
                                          when   @Month>=10   then   Str(@Month,2,0)   
                                          when   @Month<10   Then   '0'+Str(@Month,1,0)   
                                      end)+   
                                      (select   
                                        case   
                                          when   @Day>=10   then   Str(@Day,2,0)   
                                          when   @Day<10   Then   '0'+Str(@Day,1,0)   
                                        end)   
          SELECT   @Temp_No   =   档案编号   FROM   档案编号表   
                IF   @No   <>   SUBSTRING(   @Temp_No,1,8)   
                SELECT   @No   =   @No+'0001'   
          ELSE   
            BEGIN   
                SELECT   @RandNo   =   STR(CONVERT(int,(SUBSTRING(   @Temp_No   ,9,4))+1),4,0)   
                SELECT   @RandNo   =   REPLACE(   @RandNo,'   ','0')   
                SELECT   @No   =   @No   +   @RandNo   
            END   
          UPDATE   档案编号表   
                        SET   档案编号   =   @No   
      END   
     
      

  3.   

    CREATE   PROCEDURE   prGetNo   --产生按年月日排列的档案号   
              @No   varchar(12)   output   ---为产生的档案号   
      AS     
      declare   @Year   Int,   
                      @Month   int,   
                      @Day   int,   
                      @Temp_No   varchar(12),   
                      @NeedNo   varchar(4),   --档案号   
                      @RandNo   varchar(12)
      BEGIN   
          select   @year=Year(GetDate())   
          select   @Month=Month(GetDate())   
          select   @Day=Day(GetDate())   
          select   @No=Str(@Year,4,0)+   
                                      (select   
                                        case   
                                          when   @Month>=10   then   Str(@Month,2,0)   
                                          when   @Month<10   Then   '0'+Str(@Month,1,0)   
                                      end)+   
                                      (select   
                                        case   
                                          when   @Day>=10   then   Str(@Day,2,0)   
                                          when   @Day<10   Then   '0'+Str(@Day,1,0)   
                                        end)   
          SELECT   @Temp_No   =   档案编号   FROM   档案编号表   
                IF   @No   <>   SUBSTRING(   @Temp_No,1,8)   
                SELECT   @No   =   @No+'0001'   
          ELSE   
            BEGIN   
                SELECT   @RandNo   =   STR(CONVERT(int,(SUBSTRING(   @Temp_No   ,9,4))+1),4,0)   
                SELECT   @RandNo   =   REPLACE(   @RandNo,'   ','0')   
                set      @No   =   @No   +   @RandNo   
            END   
          UPDATE   档案编号表   
                        SET   档案编号   =   @No   
      END   
      END